L'esecuzione effettiva delle istruzioni MySQL è un po' complicata. Tuttavia, lo standard specifica l'ordine di interpretazione degli elementi nella query. Questo è fondamentalmente nell'ordine che specifichi, anche se penso che HAVING
e GROUP BY
potrebbe venire dopo SELECT
:
FROM
clausolaWHERE
clausolaSELECT
clausolaGROUP BY
clausolaHAVING
clausolaORDER BY
clausola
Questo è importante per capire come vengono analizzate le query. Non puoi utilizzare un alias di colonna definito in un SELECT
nel WHERE
clausola, per esempio, perché WHERE
viene analizzato prima di SELECT
. D'altra parte, un tale alias può trovarsi in ORDER BY
clausola.
Per quanto riguarda l'esecuzione effettiva, questa è davvero lasciata all'ottimizzatore. Ad esempio:
. . .
GROUP BY a, b, c
ORDER BY NULL
e
. . .
GROUP BY a, b, c
ORDER BY a, b, c
entrambi hanno l'effetto di ORDER BY
non viene eseguito affatto -- e quindi non viene eseguito dopo il GROUP BY
(nel primo caso, l'effetto è rimuovere l'ordinamento dal GROUP BY
e nel secondo l'effetto non è altro che il GROUP BY
già lo fa).