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 :FROMcláusulaWHEREcláusulaSELECTcláusulaGROUP BYcláusulaHAVINGcláusulaORDER BYclá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).