Verwenden von Kreuzprodukten
Ein Kreuzprodukt ist lediglich ein kartesisches Produkt der zwei Tabellen. Mithilfe der ANSI-SQL-89-Syntax können Sie ein Kreuzprodukt erstellen, indem Sie einfach den Filter auslassen, der die zwei Tabellen verbindet. Die Verwendung der ANSI-92-Syntax ist ein wenig schwieriger, was jedoch gut ist, da ein Kreuzprodukt normalerweise nicht erwünscht ist. Mit der ANSI-92-Syntax ist es höchst unwahrscheinlich, dass Sie versehentlich ein Kreuzprodukt erhalten.
Wenn Sie ein kartesisches Produkt explizit erstellen möchten, verwenden Sie den CROSS JOIN-Operator.
Bei diesem Vorgang wird ein Resultset mit allen möglichen Kombinationen der Eingabezeilen erstellt:
SELECT <select_list>
FROM table1 AS t1
CROSS JOIN table2 AS t2;
Zwar ist dieses Ergebnis in der Regel keine gewünschte Ausgabe, jedoch gibt es einige praktische Anwendungsfälle für das Schreiben einer expliziten CROSS JOIN-Abfrage:
- Erstellen einer Tabelle von Zahlen mit einer Zeile für jeden möglichen Wert in einem Bereich
- Generieren großer Datenmengen zu Testzwecken – wenn ein Kreuzprodukt mit einer Tabelle erstellt wird, die nur 100 Zeilen enthält, können problemlos 10.000 Ausgabezeilen mit nur wenig Arbeitsaufwand erstellt werden
CROSS JOIN-Syntax
Beachten Sie beim Schreiben von Abfragen mit CROSS JOIN die folgenden Richtlinien:
- Es wird kein Abgleich der Zeilen durchgeführt, weshalb keine ON-Klausel verwendet wird. (Es ist ein Fehler, eine ON-Klausel mit einem CROSS JOIN-Operator zu verwenden.)
- Teilen Sie die Eingabetabellennamen mit dem CROSS JOIN-Operator auf, um die ANSI-SQL-92-Syntax zu verwenden.
In der folgenden Beispielabfrage wird der CROSS JOIN-Operator zum Erstellen aller Kombinationen von Mitarbeitern und Produkten verwendet:
SELECT emp.FirstName, prd.Name
FROM HR.Employee AS emp
CROSS JOIN Production.Product AS prd;