Verwenden von Kreuzprodukten

Abgeschlossen

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;