SQL kennt die folgenden Join-Typen, die alle direkt aus der Mengenlehre stammen:
-
Innere Verbindung.
From A inner join B
ist das Äquivalent von A ∩ B und liefert die Menge der Elemente, die beiden Mengen gemeinsam sind. -
Linker äußerer Join.
From A left outer join B
ist das Äquivalent von (A − B) ∪ (A ∩ B). Jedes A kommt mindestens einmal vor; wenn es mehrere übereinstimmende Bs gibt, wird das A einmal pro übereinstimmendem B wiederholt. -
Right Outer Join.
From A right outer join B
ist das Äquivalent von (A ∩ B) ∪ (B − A). Es ist identisch mit einem Linksjoin bei den Tischen Handelsplätze. Jedes B kommt mindestens einmal vor; wenn es mehrere übereinstimmende As gibt, wird jedes B einmal pro übereinstimmendem B wiederholt. -
Vollständiger äußerer Join.
From A full outer join B
ist das Äquivalent von (A − B) ∪ (A ∩ B) ∪ (B − A). Jedes A und jedes B kommt mindestens einmal vor. Wenn ein A mit mehreren Bs übereinstimmt, wird es einmal pro Match wiederholt; Wenn ein B mehrfach übereinstimmt, wird es einmal pro Übereinstimmung wiederholt. -
Cross Join.
From A cross join B
Dies erzeugt das kartesische Produkt A × B. Jedes A wird einmal für jedes B wiederholt. Wenn A 100 Zeilen und B 100 Zeilen hat, besteht die Ergebnismenge aus 10.000 Zeilen.
Zu beachten ist, dass die theoretische Ausführung eines select
Die Abfrage besteht aus den folgenden Schritten, die in dieser Reihenfolge ausgeführt werden:
-
Berechnen Sie das vollständige kartesische Produkt der Quellmenge(n) in
from
-Klausel, um die Kandidatenergebnismenge zu präparieren. -
Wenden Sie die Join-Kriterien im
from
an -Klausel und reduzieren Sie die Kandidatenergebnismenge. -
Wenden Sie die Kriterien in der
where clause
an um die Ergebnismenge der Kandidaten weiter zu reduzieren. -
Unterteilen Sie die Kandidatenergebnismenge basierend auf den Kriterien in
group by
in Gruppen Klausel. -
Entfernen Sie aus der Kandidatenergebnismenge alle anderen Spalten als die, die in
group by
enthalten sind -Klausel oder an der Auswertung einer Aggregatfunktion beteiligt. -
Berechnen Sie den Wert solcher Aggregatfunktionen für jede Gruppe in der Kandidatenergebnismenge.
-
Reduzieren Sie jede Gruppe im Kandidatenergebnissatz in eine einzelne Zeile, die aus den Gruppierungsspalten und den berechneten Werten für jede Aggregatfunktion besteht. Die Kandidatenergebnismenge besteht jetzt aus einer Zeile für jede Gruppe mit allen Spalten außer
group by
Spalten oder die Berechnungswerte von Aggregatfunktionen für die Gruppe werden eliminiert. -
Wenden Sie die Kriterien im
having
an -Klausel, um die Kandidatenergebnismenge zu reduzieren und die endgültige Ergebnismenge zu erzeugen. -
Ordnen Sie den endgültigen Ergebnissatz nach den Kriterien in
order by
-Klausel und geben sie aus.
Es gibt noch weitere Schritte, die mit Dingen wie compute
zu tun haben und compute by
Klauseln, aber das reicht aus, um eine theoretische Vorstellung davon zu bekommen, wie es funktioniert.
Es sollte auch beachtet werden, dass nur die naivste Implementierung tatsächlich einen select
auswerten würde Anweisung auf diese Weise, aber die erzielten Ergebnisse müssen die gleichen sein, als ob die obigen Schritte vollständig ausgeführt würden.