L'attuale esecuzione di istruzioni MySQL è un po 'complicato. Tuttavia, lo standard specifica l'ordine di interpretazione degli elementi nella query. Questo è fondamentalmente nell'ordine specificato, anche se credo che HAVING
e GROUP BY
potuto venire dopo SELECT
:
FROM
clausola
WHERE
clausola
SELECT
clausola
GROUP BY
clausola
HAVING
clausola
ORDER BY
clausola
Questo è importante per capire come vengono analizzate le query. Non è possibile utilizzare un alias di colonna definito in clausola, ad esempio, perché WHERE
viene analizzato prima dello SELECT
. D'altra parte, tale alias può essere nella clausola ORDER BY
.
Per quanto riguarda l'effettiva esecuzione, ciò è in realtà lasciato all'ottimizzatore. Per esempio:
. . .
GROUP BY a, b, c
ORDER BY NULL
e
. . .
GROUP BY a, b, c
ORDER BY a, b, c
entrambi hanno l'effetto della ORDER BY
non essere eseguito affatto - e quindi non eseguito dopo il GROUP BY
(nel primo caso, l'effetto è di rimuovere ordinamento da GROUP BY
e nel secondo l'effetto è di fare nient'altro che lo fa già lo GROUP BY
).
fonte
2014-06-09 20:08:20
selezionare e gruppo da sovrapporsi leggermente, soprattutto quando si utilizzano le funzioni di aggregazione. non puoi davvero ordinarli rigorosamente in ordine. –
Questa domanda sembra essere fuori tema perché sembra mancare la ricerca – Strawberry
Non ho potuto trovare altrove dove questo argomento è discusso in dettaglio. – ericsicons