0Pricing
Coding Interview Prep · Lektion

Mengenvorgänge mit JOINs nachbilden

EXCEPT und INTERSECT in SQL-Varianten umschreiben, die diese Operatoren nicht unterstützen

Mengenvorgänge mit JOINs nachbilden ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Warum Mengenoperationen nachgebildet werden

Nicht jede Datenbank unterstützt INTERSECT und EXCEPT. Ältere MySQL-Versionen unterstützten sie beispielsweise überhaupt nicht. Interviewer prüfen, ob Sie die Mengenlogik mit Joins und Unterabfragen nachbilden können, wenn der Operator nicht verfügbar ist.

Wenn Sie sowohl den Mengenoperator als auch seine Join-Entsprechung kennen, zeigen Sie, dass Sie verstehen, was der Operator tatsächlich berechnet.

INTERSECT als INNER JOIN

INTERSECT findet die Zeilen, die in beiden Mengen vorkommen. Die Entsprechung mit einem Join ist ein INNER JOIN über alle verglichenen Spalten, ergänzt um DISTINCT, damit das Verhalten beim Entfernen von Duplikaten übereinstimmt.

Jede Spalte des Vergleichs wird Teil der Join-Bedingung.

-- A INTERSECT B emulated:
SELECT DISTINCT a.customer_id
FROM orders_2023 a
JOIN orders_2024 b
  ON a.customer_id = b.customer_id;

Warum DISTINCT für INTERSECT erforderlich ist

Ein einfacher INNER JOIN kann zu einer Vervielfachung führen: Wenn ein Wert auf einer oder beiden Seiten mehrfach vorkommt, vervielfacht der Join die Zeilen. Ein standardmäßiges INTERSECT gibt jede gemeinsame Zeile nur einmal zurück. Daher fügen Sie DISTINCT hinzu, um die vom Join erzeugten Duplikate zusammenzufassen.

DISTINCT an dieser Stelle zu vergessen, ist ein häufiger Fehler im Vorstellungsgespräch.

-- without DISTINCT, a customer with 3 orders in each year
-- would appear 9 times from the join

EXCEPT mit LEFT JOIN / IS NULL

EXCEPT (A, aber nicht B) ist der Anti-Join. Die dialektübergreifend kompatible Variante ist ein LEFT JOIN von A auf B über alle Spalten. Dabei werden nur Zeilen behalten, bei denen die B-Seite NULL ist (keine Übereinstimmung), anschließend wird DISTINCT angewendet.

Dieses Muster aus LEFT JOIN / IS NULL gehört zu den am häufigsten verwendeten Tricks in SQL-Interviews.

SELECT DISTINCT a.customer_id
FROM orders_2023 a
LEFT JOIN orders_2024 b
  ON a.customer_id = b.customer_id
WHERE b.customer_id IS NULL;

EXCEPT mit NOT EXISTS

Eine ebenso dialektübergreifend kompatible Variante von EXCEPT verwendet NOT EXISTS. Sie bedeutet: „Behalten Sie jede A-Zeile, für die keine passende B-Zeile existiert“, und behandelt NULL-Werte zuverlässig.

Viele Entwickler bevorzugen NOT EXISTS, weil die Absicht eindeutig ist und die NOT IN- plus NULL-Falle vermieden wird.

SELECT DISTINCT a.customer_id
FROM orders_2023 a
WHERE NOT EXISTS (
  SELECT 1 FROM orders_2024 b
  WHERE b.customer_id = a.customer_id
);

INTERSECT mit EXISTS

Entsprechend lässt sich INTERSECT mit EXISTS schreiben: Behalten Sie jede unterschiedliche A-Zeile, für die eine passende B-Zeile existiert.

EXISTS beendet die Suche nach der ersten Übereinstimmung. Dadurch kann es effizient sein und das Join-Fan-out vermeiden, sodass auf der Join-Seite manchmal kein DISTINCT erforderlich ist.

SELECT DISTINCT a.customer_id
FROM orders_2023 a
WHERE EXISTS (
  SELECT 1 FROM orders_2024 b
  WHERE b.customer_id = a.customer_id
);

Die NOT IN-NULL-Falle

Eine naheliegende Nachbildung von EXCEPT ist NOT IN, aber sie ist gefährlich: Wenn die Unterabfrage irgendein NULL zurückgibt, liefert NOT IN überhaupt keine Zeilen, weil der Vergleich zu UNKNOWN wird.

Dieser Fallstrick wird sehr häufig geprüft. Bevorzugen Sie NOT EXISTS oder LEFT JOIN / IS NULL, da diese NULL-sicher sind.

-- RISKY if orders_2024.customer_id can be NULL:
SELECT DISTINCT customer_id FROM orders_2023
WHERE customer_id NOT IN (
  SELECT customer_id FROM orders_2024
);

Abgleich über mehrere Spalten

Wenn der Mengenvergleich mehrere Spalten umfasst, wird jede Spalte in die Join-Bedingung aufgenommen. Bei einem Anti-Join müssen Sie außerdem berücksichtigen, dass diese Spalten NULL enthalten können – genau hier spielt NOT EXISTS seine Stärke aus.

Führen Sie jede Spalte in der ON-Klausel ausdrücklich auf. Wenn eine fehlt, ändert sich unbemerkt die Bedeutung einer „gleichen Zeile“.

SELECT DISTINCT a.id, a.city
FROM a
LEFT JOIN b
  ON a.id = b.id AND a.city = b.city
WHERE b.id IS NULL;

UNION ohne den Operator nachbilden

UNION ALL ist lediglich eine Verkettung, die jeder Dialekt direkt unterstützt. Um bei Bedarf ein eindeutiges UNION nachzubilden, verketten Sie die Abfragen mit UNION ALL in einer Unterabfrage und umschließen sie mit SELECT DISTINCT oder mit einem GROUP BY über alle Spalten.

Das zeigt: UNION ist schlicht UNION ALL plus ein Schritt zum Entfernen von Duplikaten.

SELECT DISTINCT * FROM (
  SELECT city FROM a
  UNION ALL
  SELECT city FROM b
) combined;

Die passende Nachbildung wählen

Entscheidungshilfe:

  • INTERSECT → EXISTS oder INNER JOIN + DISTINCT.
  • EXCEPT → NOT EXISTS oder LEFT JOIN / IS NULL.
  • Vermeiden Sie NOT IN, wenn NULL-Werte möglich sind.
  • UNION → UNION ALL, umschlossen von DISTINCT.

EXISTS / NOT EXISTS sind am portabelsten und NULL-sicher. Damit sind sie die sichersten Antworten im Interview.

Alles zusammenführen

Wenn Sie Mengenoperatoren in Joins übersetzen können, zeigen Sie, dass Sie sie als Mengenlogik und nicht nur als Syntax verstehen. Der Anti-Join (LEFT JOIN / IS NULL oder NOT EXISTS) ist das wichtigste Muster: Er kommt bei der Nachbildung von EXCEPT, beim Finden verwaister Datensätze und bei Fragen zu fehlenden Datensätzen gleichermaßen zum Einsatz.

Beginnen Sie mit NOT EXISTS, um die Korrektheit sicherzustellen, und erwähnen Sie anschließend die Join-Variante für die Diskussion der Performance.

Schnelltest

Ihre Datenbank unterstützt EXCEPT nicht. Sie benötigen die customer_ids aus orders_2023, die nicht in orders_2024 enthalten sind, und die Spalte kann NULL-Werte enthalten.

Zusammenfassung

Die wichtigsten Erkenntnisse:

  • INTERSECT → INNER JOIN + DISTINCT oder EXISTS.
  • EXCEPT → LEFT JOIN / IS NULL oder NOT EXISTS (Anti-Join).
  • Fügen Sie DISTINCT hinzu, um das Verhalten der Mengenoperatoren beim Entfernen von Duplikaten nachzubilden und das Join-Fan-out zu begrenzen.
  • Vermeiden Sie NOT IN, wenn NULL-Werte möglich sind; bevorzugen Sie NOT EXISTS.
  • UNION = UNION ALL, umschlossen von DISTINCT.

Häufig gestellte Fragen

Ist die Lektion „Mengenvorgänge mit JOINs nachbilden“ kostenlos?

Ja — der vollständige Text von „Mengenvorgänge mit JOINs nachbilden“ 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 „Mengenvorgänge mit JOINs nachbilden“?

EXCEPT und INTERSECT in SQL-Varianten umschreiben, die diese Operatoren nicht unterstützen 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 4 von 4.

Wie lange dauert die Lektion „Mengenvorgänge mit JOINs nachbilden“?

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

  1. UNION oder UNION ALL
  2. Kompatibilität von Spaltenanzahl und Datentypen
  3. INTERSECT und EXCEPT zum Vergleichen
  4. Mengenvorgänge mit JOINs nachbilden
← Zurück zu Coding Interview Prep