Quel est l'ordre prédéfini dans lequel les clauses sont exécutées dans MySQL? Est-ce que certaines décisions ont été prises au moment de l'exécution et cette commande est-elle correcte?
FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause
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, bien que je pense que HAVING
et GROUP BY
pourrait venir après SELECT
:
FROM
clauseWHERE
clauseSELECT
clauseGROUP BY
clauseHAVING
clauseORDER BY
clauseCeci 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 la clause WHERE
, par exemple, car le WHERE
est analysé avant le SELECT
. En revanche, un tel alias peut être dans le ORDER BY
clause.
Quant à l'exécution réelle, c'est vraiment à 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 de 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à).