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

  1. 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.

  2. ON: il filtro ON viene applicato a VT1. Solo le righe per cui è VERO sono inserite in VT2.

  3. 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.

  4. DOVE: Il filtro WHERE è applicato a VT3. Solo le righe per cui è VERO sono inserite in VT4.

  5. GROUP BY: le righe da VT4 sono organizzate in gruppi in base all'elenco di colonne specificato nella clausola GROUP BY. VT5 è generato.

  6. CUBO | ROLLUP: i supergroup (gruppi di gruppi) vengono aggiunti alle righe da VT5, generando VT6.

  7. HAVING: il filtro HAVING è applicato a VT6. Solo i gruppi per cui è VERO sono inseriti in VT7.

  8. SELEZIONA: l'elenco SELECT viene elaborato, generando VT8.

  9. DISTINCT: le file duplicate vengono rimosse da VT8. VT9 è generato.

  10. ORDER BY: le righe da VT9 vengono ordinate in base all'elenco di colonne specificato nella clausola ORDER BY. Viene generato un cursore (VC10).

  11. 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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow