Was ist CROSS JOIN in SQL?

Was ist ein CROSS JOIN in SQL?

Ein CROSS JOIN ist ein JOIN-Typ, der jede Zeile einer Tabelle mit jeder Zeile einer anderen Tabelle kombiniert. Das Ergebnis ist ein kartesisches Produkt, das alle möglichen Kombinationen von Zeilen aus beiden Tabellen enthält.

Wann sollten Sie einen CROSS JOIN verwenden?

SQL CROSS JOIN wird verwendet, um Datenkombinationen zu generieren, besonders wenn Sie alle möglichen Beziehungen zwischen zwei Sätzen erkunden. Sie sind auch nützlich zum Erstellen von Test- oder Beispieldatensätzen, da CROSS JOINs große Ergebnismengen mit vielen Kombinationen erzeugen können. In einigen Fällen helfen sie beim Erstellen von Pivot-Tabellen oder matrixartigen Ausgaben.

Syntax von CROSS JOIN in SQL zwischen zwei Tabellen

Die Syntax für CROSS JOIN ist wie folgt:

SELECT      [column names]
FROM        [TableA]
CROSS JOIN  [TableB]
CROSS JOIN in SQL Server

Vergleichstabelle von SQL JOIN- und SET-Operationen

Funktion / JOIN-Typ CROSS JOIN INNER JOIN LEFT JOIN RIGHT JOIN FULL OUTER JOIN UNION
Definition Kartesisches Produkt beider Tabellen Gleicht Zeilen mit übereinstimmenden Schlüsseln ab Alle Übereinstimmungen + nicht übereinstimmende Zeilen der linken Tabelle Alle Übereinstimmungen + nicht übereinstimmende Zeilen der rechten Tabelle Alle Übereinstimmungen + nicht übereinstimmende Zeilen von beiden Seiten Kombiniert Zeilen aus 2 Abfragen
JOIN-Bedingung Nicht erforderlich Erforderlich Erforderlich Erforderlich Erforderlich Nicht zutreffend
NULL-Behandlung Keine; alle Zeilen werden gepaart Zeilen ohne Übereinstimmung werden ausgeschlossen Füllt NULLs für nicht übereinstimmende rechte Zeilen aus Füllt NULLs für nicht übereinstimmende linke Zeilen aus Füllt NULLs auf beiden Seiten aus, wo keine Übereinstimmung vorhanden ist Doppelte Zeilen werden entfernt, es sei denn, UNION ALL
Größe des Ergebnisses Alle Kombinationen (große Ergebnismengen) Nur übereinstimmende Zeilen Übereinstimmende + nicht übereinstimmende linke Zeilen Übereinstimmende + nicht übereinstimmende rechte Zeilen Übereinstimmende + nicht übereinstimmende Zeilen auf beiden Seiten Zeilen vertikal gestapelt
Anwendungsfälle Alle Kombinationen generieren Standardabgleich (z. B. FK-PK) Alle Daten der linken Seite beibehalten Alle Daten der rechten Seite beibehalten Alles beibehalten Der Ergebnisse von zwei SELECTs Zusammenführen
Typisches Beispiel Produktvarianten (z. B. Größen × Farben) Bestellungen und Kunden Kunden und alle ihre Bestellungen (auch keine) Bestellungen und ihre Kunden (auch unbekannt) Mitarbeiter und Abteilungen (einschließlich nicht zugewiesen) Kombinieren von SELECT-Ergebnissen aus verschiedenen Tabellen
SQL-Syntax FROM A CROSS JOIN B FROM A INNER JOIN B ON ... FROM A LEFT JOIN B ON ... FROM A RIGHT JOIN B ON ... FROM A FULL OUTER JOIN B ON ... SELECT ... UNION SELECT ...
Leistungswarnung Riskant bei großen Tabellen Hängt vom Index und der Joinbedingung ab Kann mit NULLs verlangsamt werden Ähnlich wie LEFT JOIN Oft langsamer als INNER JOIN Achten Sie auf doppelte Zeilen
Filtern mit WHERE Oft erforderlich, um die Größe zu reduzieren Häufig zum Filtern übereinstimmender Werte Kann nicht übereinstimmende Ergebnisse verfeinern Kann nicht übereinstimmende Ergebnisse verfeinern Wird häufig zur abschließenden Gestaltung verwendet WHERE kann in jedem SELECT verwendet werden

Genießen Sie CROSS JOINs mit SQL Complete

Obwohl die Syntax für einen CROSS JOIN in SQL einfach ist, erfordert sie Sorgfalt. Diese Abfragen können massive Ergebnismengen erzeugen, die schwer zu verwalten und zu analysieren sind. Außerdem müssen Sie sich die exakten Tabellen- und Spaltennamen merken, um sie korrekt zu schreiben.

Hier erweist sich SQL Complete als unbezahlbar. Die intelligente Codevervollständigung und kontextabhängige Hinweise helfen Ihnen, schneller und sauberer Code zu schreiben. Die Spaltenpicker-Funktion macht es überflüssig, sich Spaltennamen zu merken – wählen Sie die benötigten Spalten einfach aus der gefilterten Vorschlagsliste aus.

In diesem Tutorial werden Sie CROSS JOINs in SQL, ihre praktischen Anwendungsfälle und wie SQL Complete die Arbeit mit JOIN-Abfragen vereinfacht, erkunden.

dbForge SQL Complete

Genießen Sie selbst die komplexesten JOINs mit SQL Complete.
Kostenlose Version abrufbar

SQL CROSS JOIN erklärt mit einem praktischen Beispiel

Angenommen, Sie haben zwei Datenbanktabellen: Cars mit Automodellen und deren Preisen sowie Colors mit Farbnamen und zusätzlichen Preisen für diese Farben. Sie müssen alle möglichen Kombinationen von Autos und Farben abrufen. Ein CROSS JOIN ist die passende Lösung:

SELECT
   c.Car_model
 ,c1.Color_name
FROM Cars c
CROSS JOIN Colors c1

Sie haben drei Automodelle und drei Farben. Die CROSS JOIN-Abfrage liefert neun Ergebnisse – die Anzahl der Zeilen in der ersten Tabelle wird mit der Anzahl der Zeilen in der zweiten Tabelle multipliziert: 3×3=9.

Verwenden Sie CROSS JOIN, um drei Tabellen in SQL Server zu verknüpfen

Sie können CROSS JOIN auf beliebig viele Tabellen anwenden.

Angenommen, Sie müssen nicht nur alle Kombinationen von Automodellen und Farben abrufen, sondern auch Reifen, die zu diesen Autos passen.

SELECT
  c.Car_model
 ,c1.Color_name
 ,t.Tire_manufacturer
FROM Cars c
CROSS JOIN Colors c1
CROSS JOIN Tires t

Sie haben 3 Automodelle, 3 Autofarben und 3 Reifenhersteller. Das Ergebnis besteht aus 27 Zeilen, da CROSS JOIN alle möglichen Kombinationen zurückgibt: 3×3×3=27.

Verwenden Sie CROSS JOIN, um einen Bericht zu generieren

CROSS JOIN kann Ihnen dabei helfen, Datenbankdaten abzurufen und sie in einem praktischen Format anzuzeigen.

Angenommen, Sie haben die Tabelle Staff mit den Spalten StaffID, Department, Shift_name, Start_time und End_time. Sie möchten einen Bericht, der alle möglichen Schichten für die Wartungsabteilung anzeigt.

Die CROSS JOIN-Klausel hilft Ihnen, die Informationen abzurufen. Sie filtern die Ergebnisse auch mit der WHERE-Bedingung.

SELECT s.Department, s1.Shift_name, s1.Start_Time, s1.End_Time
FROM Staff s
CROSS JOIN Staff s1
WHERE s.Department = 'Maintenance'
ORDER BY s1.Start_Time

Verwenden Sie CROSS JOIN, um einen großen Datensatz zu generieren

CROSS JOINs können sehr große Ergebnismengen erzeugen und sollten daher sorgfältig verwendet werden.

Wenn beispielsweise die Tabellen Car_models und Color_names jeweils 1.000 Zeilen enthalten, würde ein CROSS JOIN zwischen ihnen eine Ergebnismenge von 1.000 × 1.000 = 1.000.000 Zeilen generieren.

Aufgrund der möglichen Auswirkungen auf die Leistung empfehlen viele Experten, CROSS JOIN nach Möglichkeit zu vermeiden. Wenn es wirklich erforderlich ist, aggregieren oder filtern Sie die Daten vorher, um die Größe der Ergebnismenge zu reduzieren.

So vermeiden Sie Leistungsprobleme bei CROSS JOINs:

  • Verwenden Sie einen anderen JOIN (INNER/LEFT/RIGHT) mit 2 ON-Bedingungen
  • Verwenden Sie die GROUP BY-Klausel, um Daten vorab zu aggregieren

SQL-Ausführungsplan der CROSS JOIN-Abfrage

Vergleichen Sie zwei Abfragen: eine mit CROSS JOIN und die andere mit INNER JOIN.

Abfrage 1: Mit CROSS JOIN

SELECT p.Product_name, s.Store_address
FROM Products p
CROSS JOIN Stores s;

Abfrage 2: CROSS JOIN wird durch INNER JOIN ersetzt

SELECT p.Product_name, s.Store_address
FROM Products p
INNER JOIN Stores s ON p.ProductID=s.StoreID;

Beide Abfragen sind ziemlich aufwendig und geben eine Million Zeilen zurück. Wie jedoch in ihren Ausführungsplänen gezeigt wird, ist INNER JOIN deutlich schneller und effizienter in Bezug auf die Ressourcenkosten.

Zusammenfassungstabelle

Aspekt Details
Definition Gibt das kartesische Produkt zweier Tabellen zurück (alle möglichen Zeilenkombinationen).
Syntax SELECT * FROM Table1 CROSS JOIN Table2; Oder: SELECT * FROM Table1, Table2;
Bedingungsanforderung Keine ON-Klausel oder Bedingung ist erforderlich.
Größe des Ergebnisses Zeilen(Tabelle1) × Zeilen(Tabelle2) – wächst schnell bei größeren Tabellen.
Anwendungsfälle
  • Testdaten generieren
  • Berichtvorlagen
  • Alle Kombinationen von Sätzen
Filtern Die WHERE-Klausel kann hinzugefügt werden, um Ergebnisse zu begrenzen oder INNER JOIN zu simulieren.
Leistungsauswirkung Kann ressourcenintensiv sein; mit Vorsicht bei großen Tabellen verwenden.
ANSI-SQL-Konformität Vollständig unterstützt in SQL-92 und wichtigen RDBMSs (PostgreSQL, Oracle, MySQL usw.)
Visuelle Ausgabe Jede Zeile der linken Tabelle wird mit jeder Zeile der rechten Tabelle gepaart.
Alternativer Name(n) Cartesian JOIN, Cross Product
Wann NICHT verwendet wird
  • Wenn eine relationale Bedingung erforderlich ist
  • Bei großen Tabellen ohne Limits

Häufig gestellte Fragen

Was ist der Unterschied zwischen Cartesian JOIN und CROSS JOIN?
CROSS JOIN und Cartesian JOIN sind im Wesentlichen dasselbe. Wenn Sie eine Anweisung mit der CROSS JOIN-Klausel ausführen, erhalten Sie ein kartesisches Produkt – jede Zeile der ersten Tabelle wird mit jeder Zeile der zweiten Tabelle gepaart.
Ist CROSS JOIN dasselbe wie FULL OUTER JOIN?

SQL CROSS JOIN und FULL OUTER JOIN sind unterschiedliche JOIN-Typen.

CROSS JOIN liefert ein kartesisches Produkt als alle möglichen Kombinationen aller Zeilen in zwei Tabellen. Außerdem hat es keine ON-Klausel, da alles mit allem verbunden ist.

FULL OUTER JOIN ist eine Kombination aus LEFT OUTER und RIGHT OUTER JOINs. Es gibt die Zeilen in zwei Tabellen zurück, die die WHERE-Klausel erfüllen, und zeigt NULLs für die Zeilen an, die die ON-Bedingung nicht erfüllen.

Was ist ein CROSS JOIN und NATURAL JOIN in SQL?
Der Unterschied zwischen NATURAL JOIN und CROSS JOIN in SQL ist ganz einfach. Ein NATURAL JOIN verbindet zwei Tabellen implizit basierend auf den gemeinsamen Spalten in den zwei Tabellen, die verbunden werden. Gemeinsame Spalten sind Spalten mit demselben Namen und Datentyp. Ein NATURAL JOIN kann ein INNER JOIN, ein LEFT OUTER JOIN oder ein RIGHT OUTER JOIN sein. Inzwischen erzeugt CROSS JOIN eine Ergebnismenge, die alle Attribute beider Tabellen enthält, einschließlich doppelter und gemeinsamer Spalten.
Ist CROSS JOIN dasselbe wie CROSS APPLY?

Beim Vergleich von SQL CROSS JOIN und CROSS APPLY ist es wichtig zu beachten, dass CROSS APPLY nur die Zeilen aus der linken Tabelle zurückgibt, die übereinstimmende Ergebnisse aus der tabellarwertigen Funktion auf der rechten Seite haben.

In diesem Fall fungiert die tabellarwertige Funktion als rechte Eingabe, während der äußere Tabellenausdruck die linke Eingabe ist.

Effektiv verhält sich CROSS APPLY wie ein zeilenweiser INNER JOIN.

Was ist der Unterschied zwischen JOIN und INNER JOIN?
Wenn Sie den Typ von JOIN in Ihrer Syntax nicht angeben, wird INNER JOIN standardmäßig verwendet. Es ist jedoch zweckmäßig, die JOIN-Typen anzugeben, besonders wenn die Abfrage verschiedene SQL JOINs enthält, um die Lesbarkeit und Klarheit des Codes zu verbessern.

Mit dbForge SQL Complete erhalten Sie:

  • Code-Snippets für JOIN-Klauseln
  • Kontextbasierte Eingabeaufforderungen für Namen
  • Navigation zwischen den CASE- und END-Schlüsselwörtern
  • Hervorhebung übereinstimmender Schlüsselwortpaare
  • Schnelle Informationen zu Datenbankobjekten
  • Sofortiger Code-Formatierer mit integrierten Formatierungsprofilen

dbForge SQL Complete

Genießen Sie selbst die komplexesten JOINs mit SQL Complete.
Kostenlose Version abrufbar