Problem:
Sie möchten alle Zeilenkombinationen aus zwei Tabellen in SQL abrufen.
Beispiel:
Hier sind zwei Tabellen:Eine enthält Buchstaben (letters
) und das andere Zahlen enthält (numbers
):
Buchstabe |
---|
X |
J |
Zahl |
---|
0 |
1 |
2 |
Lösung 1:
Um jede Reihe der letters
Tabelle mit jeder Zeile der numbers
Tabelle verwenden wir den CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Das Ergebnis der Abfrage sieht so aus:
Buchstabe | Nummer |
---|---|
X | 0 |
J | 0 |
X | 1 |
J | 1 |
X | 2 |
J | 2 |
Lösung 2:
Eine andere Möglichkeit, den CROSS JOIN auszuführen, ist wie folgt:
SELECT * FROM letters, numbers;
Dadurch erhalten Sie genau das gleiche Ergebnis wie bei der vorherigen Abfrage.
Diskussion:
In der Regel ein CROSS JOIN
erzeugt eine Ergebnismenge, in der jede Zeile einer Tabelle mit jeder Zeile einer anderen Tabelle verknüpft wird. Mit anderen Worten, wenn die erste Tabelle n speichert Zeilen und die zweite Tabelle speichert m Zeilen, dann ein CROSS JOIN
ergibt ein kartesisches Produkt von n × m Reihen. Aus diesem Grund gibt die Abfrage im obigen Beispiel sechs Zeilen zurück.
Denn ein CROSS JOIN
alle möglichen Kombinationen der Zeilen zwischen den verknüpften Tabellen erzeugt, muss keine Beziehung angegeben werden. Anders als bei anderen JOINs
, gibt es kein ON
-Klausel in einem CROSS JOIN
.