A execução real de instruções MySQL é um pouco complicada. No entanto, o padrão especifica a ordem de interpretação dos elementos na consulta. Isso está basicamente na ordem que você especifica, embora eu ache que
HAVING
e GROUP BY
pode vir depois de SELECT
:FROM
cláusulaWHERE
cláusulaSELECT
cláusulaGROUP BY
cláusulaHAVING
cláusulaORDER BY
cláusula
Isso é importante para entender como as consultas são analisadas. Você não pode usar um alias de coluna definido em um
SELECT
no WHERE
cláusula, por exemplo, porque o WHERE
é analisado antes do SELECT
. Por outro lado, tal alias pode estar no ORDER BY
cláusula. Quanto à execução real, isso é realmente deixado para o otimizador. Por exemplo:
. . .
GROUP BY a, b, c
ORDER BY NULL
e
. . .
GROUP BY a, b, c
ORDER BY a, b, c
ambos têm o efeito do
ORDER BY
não sendo executado - e, portanto, não executado após o GROUP BY
(no primeiro caso, o efeito é remover a classificação do GROUP BY
e no segundo o efeito é não fazer nada além do GROUP BY
já faz).