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
:
FROM
clauseWHERE
clauseSELECT
clauseGROUP BY
clauseHAVING
clauseORDER BY
clause
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à).