0Pricing
Coding Interview Prep · Lektion

IN-, ANY- und ALL-Unterabfragen

Unterabfragen zur Mengenmitgliedschaft und die bekannte Falle von NOT IN mit NULL

IN-, ANY- und ALL-Unterabfragen ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Unterabfragen zur Mengenzugehörigkeit

Wenn eine Unterabfrage eine Liste von Werten zurückgibt, prüfen Sie die Zugehörigkeit mit IN, ANY oder ALL. Damit fragt SQL: Ist dieser Wert in dieser Menge enthalten? oder Ist er größer als jedes beziehungsweise irgendein Element dieser Menge?

  • IN – entspricht jedem Wert in der Liste.
  • ANY/SOME – ist wahr, wenn der Vergleich für mindestens ein Element gilt.
  • ALL – ist nur wahr, wenn der Vergleich für jedes Element gilt.

IN mit einer Unterabfrage

Der typische Fall: Finden Sie Mitarbeitende, die in einer Abteilung arbeiten, die in 'NYC' liegt. Die Unterabfrage gibt eine Menge von Abteilungs-IDs zurück, und IN behält die Zeilen, die mit mindestens einer davon übereinstimmen.

Das liest sich natürlich und ist die Form, die Interviewer zuerst erwarten.

SELECT name
FROM employees
WHERE dept_id IN (
  SELECT id FROM departments WHERE city = 'NYC'
);

= ANY ist dasselbe wie IN

Eine elegante Äquivalenz, die Interviewer gerne sehen: = ANY (subquery) bedeutet exakt dasselbe wie IN (subquery). Beides ist wahr, wenn der Wert mindestens einem Element der Menge entspricht.

Die folgende Abfrage liefert dasselbe Ergebnis wie die vorherige. ANY und sein Synonym SOME verallgemeinern dies auf andere Operatoren wie > und <.

SELECT name
FROM employees
WHERE dept_id = ANY (
  SELECT id FROM departments WHERE city = 'NYC'
);

ANY mit einem Vergleichsoperator

ANY wird mit > oder < besonders leistungsfähig. salary > ANY (set) ist wahr, wenn das Gehalt mindestens das kleinste Element übertrifft – also größer als das Minimum ist.

Damit finden Sie Mitarbeitende, die mehr verdienen als mindestens eine Person in Abteilung 5.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT salary FROM employees WHERE dept_id = 5
);

ALL mit einem Vergleichsoperator

salary > ALL (set) ist nur wahr, wenn das Gehalt jedes Element übertrifft – also größer als das Maximum ist. Damit finden Sie Mitarbeitende, die mehr verdienen als alle anderen in Abteilung 5.

Merken Sie sich die Abkürzung: > ALL = größer als MAX, > ANY = größer als MIN. Interviewer prüfen das ständig.

SELECT name, salary
FROM employees
WHERE salary > ALL (
  SELECT salary FROM employees WHERE dept_id = 5
);

NOT IN: Die berühmte NULL-Falle

Hier ist die wohl am häufigsten gestellte Falle bei Unterabfragen im Vorstellungsgespräch. Wenn die Unterabfrage in einem NOT IN auch nur ein NULL zurückgibt, kann das gesamte NOT IN keine Zeilen liefern – nicht die verwaisten Datensätze, die Sie erwartet haben.

Warum? x NOT IN (1, 2, NULL) wird zu x <> 1 AND x <> 2 AND x <> NULL. Der letzte Vergleich ist UNKNOWN, daher kann die AND-Verknüpfung niemals wahr sein.

SELECT name
FROM customers
WHERE id NOT IN (
  SELECT customer_id FROM orders
);

Warum diese Abfrage unbemerkt fehlschlägt

Wenn orders.customer_id NULL zulässt und irgendeine Zeile dort einen NULL-Wert enthält, liefert die vorherige Abfrage null Zeilen, obwohl offensichtlich Kunden ohne Bestellungen existieren.

  • Das Vorhandensein von NULL macht die Logik zu UNKNOWN.
  • Es tritt kein Fehler auf – die Ergebnisse sind einfach falsch (leer).

Diese Gefahr im Vorstellungsgespräch ausdrücklich zu erwähnen, ist ein starkes Signal.

NOT IN mit NULL reparieren

Drei sichere Korrekturen, die Interviewer akzeptieren:

  • NULL-Werte in der Unterabfrage ausschließen: Fügen Sie WHERE customer_id IS NOT NULL hinzu.
  • Mit NOT EXISTS neu formulieren; damit werden NULL-Werte korrekt behandelt.
  • Einen LEFT JOIN ... IS NULL-Anti-Join verwenden.

Die untenstehende abgesicherte Variante gibt die vollständige Liste der Kunden ohne Bestellungen zurück.

SELECT name
FROM customers
WHERE id NOT IN (
  SELECT customer_id FROM orders
  WHERE customer_id IS NOT NULL
);

IN funktioniert mit NULL

Eine beruhigende Gegenperspektive: Ein einfaches IN (nicht negiert) wird durch NULL-Werte in der Liste nicht beeinträchtigt. x IN (1, 2, NULL) ist wahr, wenn x gleich 1 oder 2 ist; NULL stellt einfach nie eine Übereinstimmung dar.

Die NULL-Gefahr betrifft ausschließlich NOT IN. Den Unterschied zwischen diesen beiden Fällen zu kennen, unterscheidet eine sichere Antwort von einem bloßen Raten.

Mehrspaltiges IN

Einige Dialekte (Postgres, MySQL) erlauben IN über ein Tupel aus Spalten und vergleichen Paare auf einmal. Damit finden Sie Bestellpositionen, deren (product, region)-Kombination in einer Promotionstabelle vorkommt.

SQL Server unterstützt kein IN mit Zeilenwerten; dort würden Sie die Abfrage mit EXISTS neu formulieren. Wenn Sie diese Portabilitätslücke erwähnen, beeindruckt das Interviewer.

SELECT *
FROM order_lines
WHERE (product_id, region) IN (
  SELECT product_id, region FROM promotions
);

Interview-Kernaussage

Sagen Sie: "IN prüft die Mengenzugehörigkeit und ist gleichbedeutend mit = ANY. Bei Vergleichsoperatoren bedeutet > ANY größer als das Minimum und > ALL größer als das Maximum. Die große Falle ist NOT IN mit einer Unterabfrage, die NULL zurückgeben kann – dadurch werden unbemerkt keine Zeilen zurückgegeben; daher sichere ich die Abfrage mit IS NOT NULL ab oder wechsle zu NOT EXISTS."

Damit decken Sie Mengenzugehörigkeit, die Semantik von ANY/ALL und die NULL-Falle in einem Satz ab.

Schnelltest

Die Lieblingsfalle der Interviewer bei Unterabfragen.

Zusammenfassung

Unterabfragen zur Mengenzugehörigkeit, sicher beherrscht:

  • IN = = ANY: entspricht jedem Element der Menge.
  • > ANY bedeutet größer als das Minimum; > ALL bedeutet größer als das Maximum.
  • NOT IN mit einem NULL-Wert in der Unterabfrage gibt unbemerkt keine Zeilen zurück – mit IS NOT NULL absichern oder NOT EXISTS verwenden.
  • Ein einfaches IN toleriert NULL-Werte; mehrspaltiges IN funktioniert in einigen Dialekten.

Als Nächstes: EXISTS gegenüber IN und die Performance-Frage, die erfahrene Interviewer gerne stellen.

Häufig gestellte Fragen

Ist die Lektion „IN-, ANY- und ALL-Unterabfragen“ kostenlos?

Ja — der vollständige Text von „IN-, ANY- und ALL-Unterabfragen“ 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 „IN-, ANY- und ALL-Unterabfragen“?

Unterabfragen zur Mengenmitgliedschaft und die bekannte Falle von NOT IN mit NULL 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 3 von 4.

Wie lange dauert die Lektion „IN-, ANY- und ALL-Unterabfragen“?

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. Skalare Unterabfragen in SELECT und WHERE
  2. Unterabfragen in der FROM-Klausel (abgeleitete Tabellen)
  3. IN-, ANY- und ALL-Unterabfragen
  4. EXISTS oder IN: Performance
← Zurück zu Coding Interview Prep