CROSS JOIN und kartesische Produkte
Bewusste CROSS JOINs zum Erzeugen von Kombinationen sowie versehentliche JOINs, die die Zeilenanzahl explodieren lassen
CROSS JOIN und kartesische Produkte ist eine kostenlose SQL Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Der JOIN, mit dem Interviewer Sie in die Falle locken
Ein CROSS JOIN verbindet jede Zeile der linken Tabelle mit jeder Zeile der rechten Tabelle. Es gibt keine ON-Bedingung. Wenn Tabelle A 4 Zeilen und Tabelle B 3 Zeilen hat, enthält das Ergebnis 4 x 3 = 12 Zeilen.
Das nennt man ein kartesisches Produkt. Interviewer fragen aus zwei Gründen danach: Sie wollen prüfen, ob Sie absichtlich Kombinationen erzeugen können, und ob Sie einen versehentlichen Cross Join erkennen, der die Ergebnismenge explosionsartig vergrößert.
Explizite CROSS-JOIN-Syntax
Die moderne, gut lesbare Schreibweise für ein kartesisches Produkt verwendet das explizite Schlüsselwort CROSS JOIN. Beachten Sie, dass es keine ON-Klausel gibt, wodurch die Absicht für Code-Reviewer eindeutig erkennbar ist.
Hier kombinieren wir jede Größe mit jeder Farbe, um eine vollständige Produktmatrix zu erstellen.
SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;Die alte Komma-Syntax
Sie werden kartesische Produkte weiterhin sehen, die im FROM-Abschnitt mit einem Komma und ohne Join-Bedingung geschrieben sind. Das ist die alte ANSI-Syntax.
Sie erzeugt exakt dasselbe Ergebnis wie CROSS JOIN, ist aber gefährlich: Wenn Sie eigentlich eine Join-Bedingung hinzufügen wollten und dies vergessen haben, erhalten Sie stillschweigend einen Cross Join statt eines Fehlers. Bevorzugen Sie explizites CROSS JOIN.
-- Same result as CROSS JOIN, but easy to write by accident
SELECT s.size, c.color
FROM sizes s, colors c;Ein ausgearbeitetes Beispiel: Eine Größentabelle erstellen
Angenommen, ein Geschäft verkauft T-Shirts in 3 Größen und 4 Farben und möchte für jede mögliche Variante eine Zeile haben, auch für Varianten, die noch nicht auf Lager sind. Ein Cross Join erzeugt alle 12 Kombinationen in einem Schritt.
Dies ist der häufigste beabsichtigte Anwendungsfall: ein vollständiges Raster von Optionen zu erzeugen.
SELECT s.size, c.color, 0 AS stock_qty
FROM sizes s
CROSS JOIN colors c
ORDER BY s.size, c.color;Ein Kalenderraster erzeugen
Ein weiterer klassischer Einsatz von CROSS JOIN in Vorstellungsgesprächen: Erstellen Sie ein lückenloses Raster, sodass jede Kombination vorhanden ist, selbst wenn Daten fehlen.
Hier kombinieren wir jede Filiale mit jedem Datum, damit ein späterer LEFT JOIN auf die Verkäufe eine Zeile pro Filiale und Tag liefert und Lücken mit Nullen auffüllt. Der Cross Join garantiert, dass kein Filiale-Tag-Paar übersprungen wird.
SELECT st.store_id, d.day
FROM stores st
CROSS JOIN calendar d
WHERE d.day BETWEEN DATE '2024-01-01' AND DATE '2024-01-31';Die versehentliche kartesische Explosion
Die Gefahr, die Interviewer prüfen: Sie verknüpfen zwei Tabellen, vergessen aber die Join-Bedingung. Statt einen Fehler zu melden, gibt die Datenbank problemlos jede Kombination zurück.
Wenn orders 100.000 Zeilen und customers 50.000 Zeilen enthält, umfasst das Ergebnis 5 Milliarden Zeilen. Abfragen hängen, der Speicher läuft über und die Zahlen sind stark überhöht. Dieses Muster in einem Code-Review zu erkennen, ist ein positives Signal.
-- BUG: no join condition between the two tables
SELECT o.order_id, c.name
FROM orders o, customers c;
-- returns COUNT(orders) * COUNT(customers) rowsSo erkennen Sie einen versehentlichen CROSS JOIN
Diese Symptome sollten Sie im Vorstellungsgespräch nennen:
- Die Zeilenanzahl entspricht ungefähr dem Produkt der Größen beider Tabellen, nicht ihrer Summe.
- Aggregationen wie
SUMsind um einen konstanten Faktor überhöht. - Der Abfrageplan zeigt eine Nested Loop ohne Join-Filter.
Die Ursache ist fast immer eine fehlende Gleichheitsbedingung in ON oder WHERE zwischen den Tabellen.
CROSS JOIN vs. INNER JOIN mit immer wahrer ON-Bedingung
Ein CROSS JOIN ist logisch identisch mit einem INNER JOIN ... ON 1=1. Beide erzeugen das vollständige kartesische Produkt.
Tatsächlich ist ein Inner Join lediglich ein Cross Join, gefolgt von einem Filter auf die ON-Bedingung. Dieses Denkmodell erklärt, warum eine fehlende Bedingung einen Inner Join zu einem Cross Join macht.
-- These two queries return identical results
SELECT * FROM a CROSS JOIN b;
SELECT * FROM a INNER JOIN b ON 1 = 1;Ein Cross Join mit einer Zahlentabelle
Ein nützlicher Trick: Führen Sie einen Cross Join mit einer kleinen numbers- oder generate_series-Tabelle durch, um Zeilen gezielt zu vervielfachen. Das wird verwendet, um eine einzelne Zeile in viele aufzuspalten, etwa um eine Menge in einzelne Einheiten umzuwandeln.
Hier wird jede Produktzeile durch einen Join mit einer Zahlenreihe qty-mal wiederholt, wobei nur Zahlen bis zur jeweiligen Menge berücksichtigt werden.
SELECT p.product_id, n.n AS unit_number
FROM products p
CROSS JOIN generate_series(1, 100) AS n(n)
WHERE n.n <= p.qty;Leistung und sichere Anwendung
Da das Ergebnis multiplikativ wächst, sollten Sie niemals zwei große Tabellen per Cross Join verknüpfen. Halten Sie mindestens eine Seite sehr klein, etwa eine Liste von Größen, einen kleinen Kalender oder eine Zahlentabelle.
Sagen Sie im Vorstellungsgespräch ausdrücklich: „Ein CROSS JOIN ist nur sicher, wenn eine Seite klein und begrenzt ist; andernfalls ist das Ergebnis nicht handhabbar.“ Dieser Satz zeigt Urteilsvermögen und nicht nur Syntaxkenntnisse.
Wann Sie zu CROSS JOIN greifen sollten
Verwenden Sie bewusst einen CROSS JOIN, wenn Sie jede Kombination zweier Mengen benötigen:
- Erzeugen von Optionsmatrizen (Größe × Farbe).
- Verdichten von Zeitreihen (Filiale × Tag) vor einem LEFT JOIN.
- Erweitern von Zeilen mithilfe einer Zahlentabelle.
Wenn Sie nicht jede Kombination möchten, benötigen Sie fast sicher einen Join mit einer ON-Bedingung.
Kurzer Test
Testen Sie Ihr Verständnis kartesischer Produkte.
Zusammenfassung: CROSS JOIN
Die wichtigsten Erkenntnisse:
- Ein CROSS JOIN kombiniert jede linke Zeile mit jeder rechten Zeile; die Größe des Ergebnisses entspricht dem Produkt der Eingabegrößen.
- Die Komma-Syntax ohne Bedingung erzeugt dasselbe kartesische Produkt, oft versehentlich.
- Verwenden Sie es bewusst für Kombinationsraster, die Verdichtung von Zeitreihen und die Zeilenerweiterung mithilfe einer Zahlentabelle.
- Ein Inner Join mit fehlendem
ONwird stillschweigend zu einem Cross Join – dem von Interviewern beliebten Explosionsfehler.
Häufig gestellte Fragen
Ist die Lektion „CROSS JOIN und kartesische Produkte“ kostenlos?
Ja — der vollständige Text von „CROSS JOIN und kartesische Produkte“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „CROSS JOIN und kartesische Produkte“?
Bewusste CROSS JOINs zum Erzeugen von Kombinationen sowie versehentliche JOINs, die die Zeilenanzahl explodieren lassen Du übst SQL Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. SQL Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „CROSS JOIN und kartesische Produkte“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede SQL Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- CROSS JOIN und kartesische Produkte
- SELF JOIN für Hierarchien
- Zeilen innerhalb einer Tabelle vergleichen
- Den passenden JOIN-Typ auswählen