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
KlauselWHERE
KlauselSELECT
KlauselGROUP BY
KlauselHAVING
KlauselORDER 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).