LEFT JOIN und das Beibehalten nicht zugeordneter Zeilen
Erfahren, welche Zeilen LEFT JOIN beibehält und wie NULL-Werte für nicht passende Zeilen entstehen
LEFT JOIN und das Beibehalten nicht zugeordneter Zeilen ist eine kostenlose Coding 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 Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Die Aufgabenstellung im Vorstellungsgespräch
Ein Interviewer sagt: „Listen Sie jeden Kunden und seine Bestellungen auf, einschließlich der Kunden, die noch nie bestellt haben.“ Ein INNER JOIN entfernt die Kunden ohne Bestellungen und erfüllt die Anforderung daher nicht. Hier ist ein LEFT JOIN gefragt.
Ein LEFT JOIN behält jede Zeile aus der linken (zuerst genannten) Tabelle und fügt passende Zeilen aus der rechten Tabelle hinzu, sofern es welche gibt. Diese Lektion vermittelt das präzise mentale Modell, das Interviewer erwarten.
Was LEFT JOIN garantiert
Das zentrale Versprechen lautet: Jede Zeile der linken Tabelle erscheint mindestens einmal in der Ausgabe, unabhängig davon, ob sie eine Übereinstimmung hat.
- Wenn eine linke Zeile passende Zeilen auf der rechten Seite findet, erhalten Sie eine Ausgabezeile pro Treffer.
- Wenn eine linke Zeile keine Übereinstimmung findet, erhalten Sie trotzdem eine Ausgabezeile, wobei alle Spalten der rechten Tabelle auf
NULLgesetzt werden.
Deshalb nennen Interviewer ihn einen äußeren JOIN: Zeilen außerhalb der Treffermenge bleiben erhalten, statt verworfen zu werden.
Die beiden Tabellen
In dieser Lektion verwenden wir zwei einfache Tabellen. customers enthält alle Kunden; orders erfasst Käufe und verweist über customer_id auf einen Kunden.
Beachten Sie, dass Kunde 3 (Carol) keine Zeile in orders hat. Genau diesen Kunden ohne Übereinstimmung muss ein LEFT JOIN erhalten.
-- customers
-- id | name
-- 1 | Alice
-- 2 | Bob
-- 3 | Carol
-- orders
-- id | customer_id | amount
-- 10 | 1 | 50
-- 11 | 1 | 75
-- 12 | 2 | 20Den LEFT JOIN schreiben
Die Syntax entspricht der eines INNER JOINs, wobei INNER durch LEFT ersetzt wird (das Wort OUTER ist optional: LEFT JOIN und LEFT OUTER JOIN sind identisch).
Die Tabelle, die vor dem Schlüsselwort steht, ist die erhaltene linke Seite. Die Reihenfolge ist entscheidend: customers LEFT JOIN orders behält alle Kunden, nicht alle Bestellungen.
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id;Das Ergebnis lesen
Hier sehen Sie die Ausgabe dieser Abfrage. Alice hat zwei Treffer und erscheint daher zweimal. Bob hat einen Treffer. Carol hat keinen Treffer, erscheint aber trotzdem mit NULL in der Spalte amount.
Diese eine Carol-Zeile mit NULL ist das typische Kennzeichen eines LEFT JOINs. Ein Interviewer, der Ihre Überlegungen verfolgt, möchte hören: „Nicht übereinstimmende Zeilen der linken Seite bleiben mit NULL-Werten auf der rechten Seite erhalten.“
-- name | amount
-- Alice | 50
-- Alice | 75
-- Bob | 20
-- Carol | NULL <-- preserved, no matchWoher die NULL-Werte kommen
Der Wert NULL wird nirgendwo gespeichert. Die Datenbank erzeugt ihn, weil keine Zeile der rechten Tabelle den Wert für amount liefern kann.
Jede aus der rechten Tabelle stammende Spalte wird für eine linke Zeile ohne Übereinstimmung zu NULL: o.id, o.customer_id und o.amount sind in Carols Zeile alle NULL. Das ist wichtig, weil ein NULL in o.customer_id nicht bedeutet, dass der Kunde keine ID hat, sondern dass es überhaupt keine passende Bestellung gab.
Bestellungen pro Kunde zählen
Eine häufige Anschlussfrage lautet: „Wie viele Bestellungen hat jeder Kunde, einschließlich der Kunden mit null Bestellungen?“ Ein LEFT JOIN mit COUNT liefert die richtige Lösung, aber Sie müssen die Spalte der rechten Tabelle zählen, nicht *.
COUNT(o.id) ignoriert NULL-Werte, sodass Carol den Wert 0 erhält. COUNT(*) würde für Carol fälschlich 1 liefern, weil die erzeugte NULL-Zeile weiterhin als Zeile zählt.
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 2
-- Bob | 1
-- Carol | 0Die Falle COUNT(*) vs COUNT(column)
Das ist eine klassische Falle im Vorstellungsgespräch. Nach einem LEFT JOIN ist die linke Zeile im Ergebnis tatsächlich vorhanden, wobei die Spalten der rechten Tabelle NULL enthalten.
COUNT(*)zählt diese Zeile und liefert für einen Kunden ohne Bestellungen den Wert 1.COUNT(o.id)überspringt den NULL-Wert und liefert korrekt 0.
Zählen Sie immer eine Spalte, die auf der Seite ohne Treffer NULL ist, wenn Sie echte Nullen benötigen.
-- WRONG: Carol shows 1
SELECT c.name, COUNT(*) AS n
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;Summieren mit LEFT JOIN
Auch andere Aggregatfunktionen außer COUNT gehen problemlos mit den erzeugten NULL-Werten um. SUM ignoriert NULL-Werte, sodass ein Kunde ohne Übereinstimmung NULL erhält, nicht etwa einen Fehler.
Für Berichte erwarten Interviewer oft 0 statt NULL. Umschließen Sie das Aggregat mit COALESCE, um einen Standardwert einzusetzen.
SELECT c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 125
-- Bob | 20
-- Carol | 0Linke und rechte Tabelle klar benennen
Wenn ein Interviewer fragt, „welche Tabelle bleibt erhalten?“, antworten Sie selbstbewusst: die Tabelle links vom JOIN-Schlüsselwort. Lesen Sie die Abfrage von links nach rechts.
A LEFT JOIN B bedeutet: alle Zeilen von A behalten. Um stattdessen alle Zeilen von B zu behalten, drehen Sie entweder zu B LEFT JOIN A um oder verwenden Sie einen RIGHT JOIN. Die meisten Teams bevorzugen ausschließlich LEFT JOINs, weil das Lesen von links nach rechts einfacher nachzuvollziehen ist und die Tabellen dafür einfach umgestellt werden können.
Eine gedankliche Checkliste
Wenn Sie in einem Vorstellungsgespräch einen LEFT JOIN sehen, gehen Sie diese Checkliste laut durch:
- Welche Seite bleibt erhalten? Die linke Tabelle; alle Zeilen bleiben erhalten.
- Zeilen ohne Übereinstimmung? Sie erscheinen einmal mit NULL-Werten aus der rechten Tabelle.
- Zählen? Verwenden Sie
COUNT(right_col)für echte Nullen. - Summieren? Verwenden Sie
COALESCE, wenn Sie 0 statt NULL benötigen.
Diese Checkliste laut zu formulieren, signalisiert ein sorgfältiges Vorgehen auf Senior-Niveau.
Kurzer Test
Testen Sie Ihre Intuition zu LEFT JOINs beim Zählen.
Zusammenfassung
LEFT JOIN erhält jede Zeile der linken Tabelle. Zeilen mit Treffern werden mit ihren Übereinstimmungen auf der rechten Seite verbunden; Zeilen ohne Treffer bleiben einmal mit NULL in allen Spalten der rechten Tabelle erhalten.
- Die linke Tabelle ist diejenige vor dem Schlüsselwort
JOIN. - Erzeugte NULL-Werte kennzeichnen Zeilen ohne Treffer.
COUNT(right_col)liefert echte Nullen;COUNT(*)tut dies nicht.COALESCE(SUM(...), 0)wandelt NULL-Summen in 0 um.
Das bildet die Grundlage für das Auffinden fehlender Daten und Anti-JOINs in den folgenden Lektionen.
Häufig gestellte Fragen
Ist die Lektion „LEFT JOIN und das Beibehalten nicht zugeordneter Zeilen“ kostenlos?
Ja — der vollständige Text von „LEFT JOIN und das Beibehalten nicht zugeordneter Zeilen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „LEFT JOIN und das Beibehalten nicht zugeordneter Zeilen“?
Erfahren, welche Zeilen LEFT JOIN beibehält und wie NULL-Werte für nicht passende Zeilen entstehen Du übst Coding 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 Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding 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 „LEFT JOIN und das Beibehalten nicht zugeordneter Zeilen“?
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 Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding 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
- LEFT JOIN und das Beibehalten nicht zugeordneter Zeilen
- Die Semantik von RIGHT und FULL OUTER JOIN
- Zeilen ohne Treffer finden (Anti-Join)
- Die WHERE-Falle bei OUTER JOINs