Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MySQL / ordre d'exécution des clauses

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 clause
  • WHERE clause
  • SELECT clause
  • GROUP BY clause
  • HAVING clause
  • ORDER 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à).