Suche…


Logische Reihenfolge der Abfrageverarbeitung 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 

Die Reihenfolge, in der eine Abfrage verarbeitet wird, und eine Beschreibung jedes Abschnitts.

VT steht für 'Virtual Table' und zeigt, wie verschiedene Daten bei der Verarbeitung der Abfrage erzeugt werden

  1. FROM: Ein kartesisches Produkt (Cross Join) wird zwischen den ersten beiden Tabellen in der FROM-Klausel ausgeführt, und als Ergebnis wird die virtuelle Tabelle VT1 generiert.

  2. ON: Der ON-Filter wird auf VT1 angewendet. Nur Zeilen, für die der Wert TRUE ist, werden in VT2 eingefügt.

  3. OUTER (join): Wenn ein OUTER JOIN angegeben ist (im Gegensatz zu einem CROSS JOIN oder einem INNER JOIN), werden Zeilen aus der konservierten Tabelle oder den Tabellen, für die keine Übereinstimmung gefunden wurde, zu den Zeilen aus VT2 als äußere Zeilen hinzugefügt VT3. Wenn in der FROM-Klausel mehr als zwei Tabellen angezeigt werden, werden die Schritte 1 bis 3 wiederholt zwischen dem Ergebnis des letzten Joins und der nächsten Tabelle in der FROM-Klausel angewendet, bis alle Tabellen verarbeitet sind.

  4. WHERE: Der WHERE-Filter wird auf VT3 angewendet. Nur Zeilen, für die der Wert TRUE ist, werden in VT4 eingefügt.

  5. GROUP BY: Die Zeilen von VT4 sind in Gruppen angeordnet, basierend auf der in der GROUP BY-Klausel angegebenen Spaltenliste. VT5 wird generiert.

  6. CUBE | ROLLUP: Supergruppen (Gruppen von Gruppen) werden zu den Zeilen von VT5 hinzugefügt, wodurch VT6 generiert wird.

  7. HAVING: Der HAVING-Filter wird auf VT6 angewendet. Nur Gruppen, für die der Wert TRUE ist, werden in VT7 eingefügt.

  8. SELECT: Die SELECT-Liste wird verarbeitet und generiert VT8.

  9. DISTINCT: Doppelte Zeilen werden aus VT8 entfernt. VT9 wird generiert.

  10. ORDER BY: Die Zeilen von VT9 werden nach der in der ORDER BY-Klausel angegebenen Spaltenliste sortiert. Ein Cursor wird generiert (VC10).

  11. TOP: Die angegebene Anzahl oder der Prozentsatz der Zeilen wird am Anfang von VC10 ausgewählt. Die Tabelle VT11 wird generiert und an den Anrufer zurückgegeben. LIMIT hat in einigen SQL-Dialekten wie Postgres und Netezza die gleiche Funktionalität wie TOP.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow