L'exécution réelle des instructions MySQL est un peu délicate. Cependant, la norme spécifie l'ordre d'interprétation des éléments dans la requête. C'est essentiellement dans l'ordre que vous spécifiez, même si je pense que HAVING et GROUP BY pourrait venir après SELECT :
FROMclauseWHEREclauseSELECTclauseGROUP BYclauseHAVINGclauseORDER BYclause
Ceci est important pour comprendre comment les requêtes sont analysées. Vous ne pouvez pas utiliser un alias de colonne défini dans un SELECT dans le WHERE clause, par exemple, parce que la WHERE est analysé avant le SELECT . Par contre, un tel alias peut être dans le ORDER BY clause.
Quant à l'exécution proprement dite, elle est vraiment laissée à l'optimiseur. Par exemple :
. . .
GROUP BY a, b, c
ORDER BY NULL
et
. . .
GROUP BY a, b, c
ORDER BY a, b, c
les deux ont pour effet le ORDER BY pas du tout exécuté -- et donc pas exécuté après le GROUP BY (dans le premier cas, l'effet est de supprimer le tri du GROUP BY et dans le second l'effet est de ne rien faire de plus que le GROUP BY le fait déjà).