Die tatsächliche Ausführung von MySQL-Anweisungen ist ein bisschen schwierig. Der Standard gibt jedoch die Reihenfolge der Interpretation von Elementen in der Abfrage an. Dies ist im Wesentlichen in der Reihenfolge, die Sie angeben, obwohl ich HAVING
denken und GROUP BY
könnte kommen nach SELECT
:
FROM
Klausel
WHERE
Klausel
SELECT
Klausel
GROUP BY
Klausel
HAVING
Klausel
ORDER BY
Klausel
Dies ist wichtig für das Verständnis, wie Abfragen analysiert werden. Sie können beispielsweise keinen Spaltenalias verwenden, der in SELECT
in der WHERE
-Klausel definiert ist, weil die WHERE
vor der SELECT
geparst wird. Auf der anderen Seite kann solch ein Alias in der ORDER BY
Klausel sein.
Wie für die tatsächliche Ausführung, das ist 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
haben sowohl die Wirkung der ORDER BY
haupt nicht ausgeführt werden - und so nicht ausgeführt, nachdem die GROUP BY
(im ersten Fall die Wirkung zu entfernen ist Sortierung von der GROUP BY
und in der zweiten ist der Effekt nichts mehr zu tun, als die GROUP BY
bereits tut).
Auswählen und gruppen durch Überlappung, die jeweils etwas andere besonders wenn Aggregatfunktionen verwendet werden. Sie können diese nicht wirklich streng sortieren. –
Diese Frage scheint off-topic zu sein, weil es scheint, Forschung fehlt – Strawberry
Ich konnte nirgendwo anders finden, wo dieses Thema im Detail diskutiert wird. – ericsicons