0Pricing
SQL Academy · Lektion

IN vs. ANY vs. ALL

Mit Mengen von Werten vergleichen

IN vs. ANY vs. ALL ist eine kostenlose SQL Academy-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 SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was sind IN, ANY und ALL?

Beim Schreiben von SQL-Abfragen müssen Sie häufig einen Wert mit einer Menge von Werten vergleichen. SQL stellt Ihnen dafür drei leistungsfähige Operatoren zur Verfügung: IN, ANY und ALL.

Alle drei können mit Unterabfragen verwendet werden, die eine Liste von Werten zurückgeben. Sie sehen ähnlich aus, verhalten sich aber unterschiedlich – die Wahl des richtigen Operators kann Ihre Abfrage ausdrucksstärker und effizienter machen.

Der IN-Operator

Der IN-Operator prüft, ob ein Wert mit einem beliebigen Wert in einer Liste oder im Ergebnis einer Unterabfrage übereinstimmt. Er ist der einfachste der drei Operatoren.

Das folgende Beispiel ruft Mitarbeitende ab, die in den Abteilungen Sales, HR oder Engineering arbeiten.

SELECT name, department
FROM employees
WHERE department IN ('Sales', 'HR', 'Engineering');

IN mit einer Unterabfrage

IN wird besonders leistungsfähig, wenn es mit einer Unterabfrage kombiniert wird. Statt einer fest codierten Liste können Sie die Vergleichswerte direkt aus einer anderen Tabelle abrufen.

Hier ermitteln wir alle Mitarbeitenden, die zu einer Abteilung mit einem Budget von über 100.000 gehören.

SELECT name, department
FROM employees
WHERE department IN (
  SELECT dept_name
  FROM departments
  WHERE budget > 100000
);

Der ANY-Operator

ANY (auch als SOME geschrieben) vergleicht einen Wert anhand eines Vergleichsoperators wie =, >, <, >= oder <= mit jedem von einer Unterabfrage zurückgegebenen Wert.

Die Bedingung ist wahr, wenn der Vergleich für mindestens einen Wert im Ergebnis der Unterabfrage wahr ist.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT salary
  FROM employees
  WHERE department = 'HR'
);

= ANY entspricht IN

Eine wichtige Äquivalenz: = ANY (subquery) ist logisch identisch mit IN (subquery). Beide geben TRUE zurück, wenn der Wert mit mindestens einem Ergebnis der Unterabfrage übereinstimmt.

Diese beiden Abfragen liefern dasselbe Ergebnis:

-- Using IN
SELECT name FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE location = 'NYC');

-- Using = ANY
SELECT name FROM employees
WHERE department_id = ANY (SELECT id FROM departments WHERE location = 'NYC');

Der ALL-Operator

ALL vergleicht einen Wert mit jedem Wert im Ergebnis einer Unterabfrage. Die Bedingung ist nur dann wahr, wenn der Vergleich für alle zurückgegebenen Werte gilt.

Dieses Beispiel findet Mitarbeitende, deren Gehalt höher ist als jedes Gehalt der Einstufung Intern – das bedeutet, dass sie mehr verdienen als der bestbezahlte Praktikant.

SELECT name, salary
FROM employees
WHERE salary > ALL (
  SELECT salary
  FROM employees
  WHERE job_grade = 'Intern'
);

ANY vs. ALL — Gegenüberstellung

Der entscheidende Unterschied: ANY erfordert, dass die Bedingung für mindestens einen Wert wahr ist, während ALL verlangt, dass sie für jeden Wert wahr ist.

Stellen Sie es sich so vor: ANY entspricht einem OR über alle Vergleiche, und ALL einem AND über alle Vergleiche.

-- Returns rows where salary > at least one value in the subquery
SELECT name, salary FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE department = 'Support');

-- Returns rows where salary > every value in the subquery
SELECT name, salary FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE department = 'Support');

NOT IN vs. &lt;&gt; ALL

Genau wie = ANY IN entspricht, ist der Operator <> ALL gleichbedeutend mit NOT IN. Beide geben nur dann TRUE zurück, wenn der Wert mit keinem Wert in der Unterabfrage übereinstimmt.

Aber Vorsicht – wenn die Unterabfrage auch nur ein NULL zurückgibt, gibt NOT IN aufgrund der dreiwertigen Logik von SQL überhaupt keine Zeilen zurück.

-- Using NOT IN
SELECT name FROM employees
WHERE department_id NOT IN (SELECT id FROM departments WHERE location = 'Remote');

-- Using <> ALL (equivalent)
SELECT name FROM employees
WHERE department_id <> ALL (SELECT id FROM departments WHERE location = 'Remote');

Die NULL-Falle bei NOT IN

Ein wichtiger Fallstrick: Wenn die mit NOT IN verwendete Unterabfrage ein NULL zurückgibt, wird die gesamte NOT IN-Bedingung für jede Zeile zu UNKNOWN ausgewertet, wodurch eine leere Ergebnismenge zurückgegeben wird.

Um dies zu vermeiden, filtern Sie NULL-Werte aus der Unterabfrage heraus oder verwenden Sie stattdessen NOT EXISTS – damit werden NULL-Werte sicher verarbeitet.

-- Dangerous: if manager_id has any NULL, no rows are returned
SELECT name FROM employees
WHERE id NOT IN (SELECT manager_id FROM employees);

-- Safe: filter NULLs explicitly
SELECT name FROM employees
WHERE id NOT IN (
  SELECT manager_id FROM employees
  WHERE manager_id IS NOT NULL
);

Praxisbeispiel: Gutverdienende finden

Betrachten wir alle drei Operatoren in einem realistischen Szenario. Wir haben eine Tabelle employees mit den Spalten name, department und salary.

Wir suchen Mitarbeitende, die mehr als das durchschnittliche Gehalt einer beliebigen einzelnen Abteilung verdienen – also mehr als der Durchschnitt mindestens einer Abteilung.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT AVG(salary)
  FROM employees
  GROUP BY department
)
ORDER BY salary DESC;

Wann verwenden Sie welchen Operator?

Hier ist eine kurze Orientierungshilfe für die Wahl zwischen den drei Operatoren:

  • IN – wenn Sie eine statische Liste haben oder eine einfache Gleichheitsprüfung mit einer Unterabfrage benötigen.
  • = ANY – wie IN, ermöglicht aber die Verwendung anderer Vergleichsoperatoren wie >, <.
  • ALL – wenn die Bedingung für jeden Wert gelten muss (z. B. größer als das Maximum, ohne MAX zu verwenden).
  • NOT IN – praktisch, aber achten Sie auf NULL-Werte; bevorzugen Sie NOT EXISTS, wenn die Unterabfrage NULL-Werte enthalten kann.

Kurztest

Testen Sie Ihr Verständnis von IN, ANY und ALL.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt, wie Sie mit IN, ANY und ALL Werte mit einer Menge vergleichen.

Wichtige Erkenntnisse:

  • IN prüft die Zugehörigkeit – TRUE, wenn der Wert mit einem beliebigen Element in der Liste oder Unterabfrage übereinstimmt.
  • = ANY ist gleichbedeutend mit IN; die Verwendung anderer Operatoren wie > ANY bedeutet, dass die Bedingung für mindestens eine Übereinstimmung wahr ist.
  • ALL bedeutet, dass die Bedingung für jeden von der Unterabfrage zurückgegebenen Wert gelten muss.
  • NOT IN gibt unbemerkt keine Zeilen zurück, wenn die Unterabfrage NULL-Werte enthält – schützen Sie sich immer davor.
  • Verwenden Sie NOT EXISTS als sichere Alternative zu NOT IN, wenn NULL-Werte vorhanden sein können.

Häufig gestellte Fragen

Ist die Lektion „IN vs. ANY vs. ALL“ kostenlos?

Ja — der vollständige Text von „IN vs. ANY vs. ALL“ 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 Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „IN vs. ANY vs. ALL“?

Mit Mengen von Werten vergleichen Du übst SQL Academy 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 Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy 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 vs. ANY vs. ALL“?

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 Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-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. Korrellierte Unterabfragen
  2. EXISTS und NOT EXISTS
  3. IN vs. ANY vs. ALL
  4. EXISTS- vs. JOIN-Performance
← Zurück zu SQL Academy