La ejecución real de las declaraciones de MySQL es un poco complicada. Sin embargo, el estándar especifica el orden de interpretación de los elementos en la consulta. Esto es básicamente en el orden que especificas, aunque creo que HAVING
y GROUP BY
podría venir después de SELECT
:
FROM
cláusulaWHERE
cláusulaSELECT
cláusulaGROUP BY
cláusulaHAVING
cláusulaORDER BY
cláusula
Esto es importante para comprender cómo se analizan las consultas. No puede usar un alias de columna definido en un SELECT
en el WHERE
cláusula, por ejemplo, porque WHERE
se analiza antes de SELECT
. Por otro lado, dicho alias puede estar en el ORDER BY
cláusula.
En cuanto a la ejecución real, eso realmente se deja en manos del optimizador. Por ejemplo:
. . .
GROUP BY a, b, c
ORDER BY NULL
y
. . .
GROUP BY a, b, c
ORDER BY a, b, c
ambos tienen el efecto de ORDER BY
no se ejecuta en absoluto, y por lo tanto no se ejecuta después de GROUP BY
(en el primer caso, el efecto es eliminar la clasificación del GROUP BY
y en el segundo el efecto es no hacer nada más que el GROUP BY
ya lo hace).