SQL
Kolejność wykonania
Szukaj…
Logiczna kolejność przetwarzania zapytań w 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
Kolejność przetwarzania zapytania i opis każdej sekcji.
VT to skrót od „Virtual Table” i pokazuje, jak różne dane są generowane podczas przetwarzania zapytania
FROM: Produkt kartezjański (łączenie krzyżowe) jest wykonywany między dwiema pierwszymi tabelami w klauzuli FROM, w wyniku czego generowana jest wirtualna tabela VT1.
WŁ .: Filtr WŁ. Jest stosowany do VT1. Tylko wiersze, dla których jest PRAWDA, są wstawiane do VT2.
ZEWNĘTRZNE (złączenie): Jeśli określono ZŁĄCZE ZEWNĘTRZNE (w przeciwieństwie do ZŁĄCZA KRZYŻOWEGO lub DOŁĄCZENIA WEWNĘTRZNEGO), wiersze z zachowanej tabeli lub tabel, dla których nie znaleziono dopasowania, są dodawane do wierszy z VT2 jako wiersze zewnętrzne, generując VT3. Jeśli w klauzuli FROM pojawiają się więcej niż dwie tabele, kroki od 1 do 3 są powtarzane między wynikiem ostatniego łączenia i następnej tabeli w klauzuli FROM, aż wszystkie tabele zostaną przetworzone.
GDZIE: Filtr WHERE jest stosowany do VT3. Tylko wiersze, dla których jest PRAWDA, są wstawiane do VT4.
GROUP BY: Wiersze z VT4 są ułożone w grupy na podstawie listy kolumn określonej w klauzuli GROUP BY. Generowane jest VT5.
CUBE | ROLLUP: Supergrupy (grupy grup) są dodawane do wierszy z VT5, generując VT6.
HAVING: Filtr HAVING jest stosowany do VT6. Tylko grupy, dla których jest PRAWDA, są wstawiane do VT7.
SELECT: Lista SELECT jest przetwarzana, generując VT8.
ODRÓŻNIJ: Zduplikowane wiersze są usuwane z VT8. VT9 jest generowany.
ORDER BY: Wiersze z VT9 są sortowane zgodnie z listą kolumn określoną w klauzuli ORDER BY. Generowany jest kursor (VC10).
TOP: Określona liczba lub procent wierszy jest wybierana od początku VC10. Tabela VT11 jest generowana i zwracana do osoby dzwoniącej. LIMIT ma taką samą funkcjonalność jak TOP w niektórych dialektach SQL, takich jak Postgres i Netezza.