Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ausführungsreihenfolge der MySQL-Abfrage/Klausel

Die eigentliche Ausführung von MySQL-Anweisungen ist etwas knifflig. Der Standard legt jedoch die Reihenfolge der Interpretation von Elementen in der Abfrage fest. Dies ist im Grunde in der Reihenfolge, die Sie angeben, obwohl ich denke, HAVING und GROUP BY könnte nach SELECT kommen :

  • FROM Klausel
  • WHERE Klausel
  • SELECT Klausel
  • GROUP BY Klausel
  • HAVING Klausel
  • ORDER BY Klausel

Dies ist wichtig, um zu verstehen, wie Abfragen analysiert werden. Sie können keinen in einem SELECT definierten Spaltenalias verwenden im WHERE Klausel, zum Beispiel, weil die WHERE wird vor dem SELECT geparst . Andererseits kann ein solcher Alias ​​im ORDER BY stehen Klausel.

Was die eigentliche Ausführung betrifft, so bleibt das wirklich dem Optimierer überlassen. Zum Beispiel:

. . .
GROUP BY a, b, c
ORDER BY NULL

und

. . .
GROUP BY a, b, c
ORDER BY a, b, c

beide haben die Wirkung von ORDER BY überhaupt nicht ausgeführt -- und daher nach dem GROUP BY nicht ausgeführt (Im ersten Fall wird die Sortierung aus dem GROUP BY entfernt und im zweiten ist der Effekt nichts anderes als GROUP BY schon).