Rzeczywiste wykonanie instrukcji MySQL jest nieco trudne. Jednak norma określa kolejność interpretacji elementów w zapytaniu. Jest to zasadniczo w kolejności, którą określisz, chociaż myślę, że HAVING
i GROUP BY
może pojawić się po SELECT
:
FROM
klauzulaWHERE
klauzulaSELECT
klauzulaGROUP BY
klauzulaHAVING
klauzulaORDER BY
klauzula
Jest to ważne dla zrozumienia sposobu analizowania zapytań. Nie możesz użyć aliasu kolumny zdefiniowanego w SELECT
w WHERE
na przykład, ponieważ WHERE
jest analizowany przed SELECT
. Z drugiej strony taki alias może znajdować się w ORDER BY
klauzula.
Jeśli chodzi o faktyczne wykonanie, to tak naprawdę zależy to od optymalizatora. Na przykład:
. . .
GROUP BY a, b, c
ORDER BY NULL
i
. . .
GROUP BY a, b, c
ORDER BY a, b, c
oba mają efekt ORDER BY
w ogóle nie jest wykonywany -- a więc nie jest wykonywany po GROUP BY
(w pierwszym przypadku efektem jest usunięcie sortowania z GROUP BY
a w drugim efektem jest zrobienie niczego poza GROUP BY
już to robi).