Ein SQL CROSS JOIN kombiniert jede Zeile der einen Tabelle mit jeder Zeile der anderen – das Ergebnis ist das kartesische Produkt. Hat die erste Tabelle 3 Zeilen und die zweite 4, liefert der CROSS JOIN 12 Zeilen, ganz ohne Verbindungsbedingung. Damit ist er die einfachste JOIN-Form – anders als der NATURAL JOIN sucht er sich keine Spalten selbst aus, sondern nimmt schlicht alle Paare.

Syntax

Der CROSS JOIN kommt ohne ON aus:

SELECT s.name, p.name
FROM schuhe s
CROSS JOIN farben p;

Jeder Schuh erscheint in jeder Farbe – genau das Muster, das Konfiguratoren oder Kombinationslisten brauchen.

Typische Einsatzzwecke

  • Kombinationen erzeugen: Produkte × Farben × Größen für eine vollständige Variantenliste.
  • Lückenfreie Kalender: CROSS JOIN einer Zahlentabelle mit einem Zeitraum, um auch Tage ohne Umsatz zu zeigen.
  • Testdaten: schnell viele Zeilen aus wenigen Ausgangswerten generieren.

Kreuzprodukt als Basis der JOINs

Jeder normale JOIN ist mathematisch ein gefiltertes Kreuzprodukt: Erst werden alle Paare gebildet, dann entfernt die Bedingung die unpassenden. Auch in der Relationalen Algebra ist das Kreuzprodukt eine Grundoperation, aus der sich Verbindungen ableiten. Mit WHERE wird ein CROSS JOIN übrigens zum INNER JOIN ohne ON – in MySQL und MariaDB sind JOIN, INNER JOIN und CROSS JOIN syntaktisch sogar gleichwertig, im SQL-Standard aber nicht. Wer eine Tabelle mit sich selbst kombinieren will, nutzt statt eines CROSS JOIN meist einen Self-Join mit Bedingung – etwa um Paare oder Hierarchien zu bilden.

Vorsicht: versehentliche Kreuzprodukte

Fehlt in einer Abfrage versehentlich die ON- oder WHERE-Bedingung, entsteht ein ungewolltes kartesisches Produkt: Bei 1.000 × 10.000 Zeilen sind das 10 Millionen Ergebniszeilen – ein typischer Performance-Albtraum. Der Ausführungsplan (EXPLAIN) zeigt solche Fälle meist deutlich.

Verwandte Grundlagen: SQL: JOINs richtig verstehen, SQL WHERE: Zeilen gezielt filtern.