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

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

  2. WŁ .: Filtr WŁ. Jest stosowany do VT1. Tylko wiersze, dla których jest PRAWDA, są wstawiane do VT2.

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

  4. GDZIE: Filtr WHERE jest stosowany do VT3. Tylko wiersze, dla których jest PRAWDA, są wstawiane do VT4.

  5. GROUP BY: Wiersze z VT4 są ułożone w grupy na podstawie listy kolumn określonej w klauzuli GROUP BY. Generowane jest VT5.

  6. CUBE | ROLLUP: Supergrupy (grupy grup) są dodawane do wierszy z VT5, generując VT6.

  7. HAVING: Filtr HAVING jest stosowany do VT6. Tylko grupy, dla których jest PRAWDA, są wstawiane do VT7.

  8. SELECT: Lista SELECT jest przetwarzana, generując VT8.

  9. ODRÓŻNIJ: Zduplikowane wiersze są usuwane z VT8. VT9 jest generowany.

  10. ORDER BY: Wiersze z VT9 są sortowane zgodnie z listą kolumn określoną w klauzuli ORDER BY. Generowany jest kursor (VC10).

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



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow