SQL
Ordine di esecuzione
Ricerca…
Ordine logico di elaborazione delle query in SQL
/*(8)*/ SELECT /*9*/ DISTINCT /*11*/ TOP
/*(1)*/ FROM
/*(3)*/ JOIN
/*(2)*/ ON
/*(4)*/ WHERE
/*(5)*/ GROUP BY
/*(6)*/ WITH {CUBE | ROLLUP}
/*(7)*/ HAVING
/*(10)*/ ORDER BY
/*(11)*/ LIMIT
L'ordine in cui una query viene elaborata e la descrizione di ogni sezione.
VT sta per 'Virtual Table' e mostra come vengono prodotti i vari dati man mano che la query viene elaborata
FROM: Un prodotto cartesiano (cross join) viene eseguito tra le prime due tabelle nella clausola FROM e, di conseguenza, viene generata la tabella virtuale VT1.
ON: il filtro ON viene applicato a VT1. Solo le righe per cui è VERO sono inserite in VT2.
OUTER (join): Se viene specificato un JOIN OUTER (al contrario di un CROSS JOIN o UNO JOIN INTERNO), le righe della tabella o delle tabelle protette per le quali non è stata trovata una corrispondenza vengono aggiunte alle righe da VT2 come righe esterne, generando VT3. Se nella clausola FROM vengono visualizzate più di due tabelle, i passaggi da 1 a 3 vengono applicati ripetutamente tra il risultato dell'ultimo join e la successiva tabella nella clausola FROM fino a quando tutte le tabelle vengono elaborate.
DOVE: Il filtro WHERE è applicato a VT3. Solo le righe per cui è VERO sono inserite in VT4.
GROUP BY: le righe da VT4 sono organizzate in gruppi in base all'elenco di colonne specificato nella clausola GROUP BY. VT5 è generato.
CUBO | ROLLUP: i supergroup (gruppi di gruppi) vengono aggiunti alle righe da VT5, generando VT6.
HAVING: il filtro HAVING è applicato a VT6. Solo i gruppi per cui è VERO sono inseriti in VT7.
SELEZIONA: l'elenco SELECT viene elaborato, generando VT8.
DISTINCT: le file duplicate vengono rimosse da VT8. VT9 è generato.
ORDER BY: le righe da VT9 vengono ordinate in base all'elenco di colonne specificato nella clausola ORDER BY. Viene generato un cursore (VC10).
TOP: il numero specificato o la percentuale di righe viene selezionata dall'inizio di VC10. La tabella VT11 viene generata e restituita al chiamante. LIMIT ha la stessa funzionalità di TOP in alcuni dialetti SQL come Postgres e Netezza.