SQL Academy · Les

IN versus ANY versus ALL

Vergelijk met sets van waarden.

Les 3 van 413 stappen

IN versus ANY versus ALL is een gratis SQL Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.

Wat zijn IN, ANY en ALL?

Bij het schrijven van SQL-query's moet je vaak een waarde vergelijken met een verzameling waarden. SQL biedt hiervoor drie krachtige operatoren: IN, ANY en ALL.

Alle drie kunnen werken met subqueries die een lijst met waarden retourneren. Ze lijken op elkaar, maar gedragen zich verschillend — met de juiste keuze wordt je query veel expressiever en efficiënter.

De IN-operator

De IN-operator controleert of een waarde overeenkomt met een waarde in een lijst of het resultaat van een subquery. Dit is de eenvoudigste van de drie.

In het onderstaande voorbeeld worden werknemers opgehaald die op de afdeling Verkoop, HR of Engineering werken.

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

IN met een subquery

IN wordt vooral krachtig in combinatie met een subquery. In plaats van een hardgecodeerde lijst kun je de vergelijkingswaarden rechtstreeks uit een andere tabel ophalen.

Hier zoeken we alle werknemers die bij een afdeling horen waarvan het budget hoger is dan 100.000.

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

De ANY-operator

ANY (ook geschreven als SOME) vergelijkt een waarde met elke waarde die door een subquery wordt geretourneerd, met behulp van een vergelijkingsoperator zoals =, >, <, >= of <=.

De voorwaarde is waar als de vergelijking voor minstens één waarde in het resultaat van de subquery waar is.

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

= ANY is hetzelfde als IN

Een belangrijke gelijkwaardigheid om te kennen: = ANY (subquery) is logisch identiek aan IN (subquery). Beide retourneren true wanneer de waarde overeenkomt met minstens één resultaat van de subquery.

Deze twee query's leveren hetzelfde resultaat op:

-- 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');

De ALL-operator

ALL vergelijkt een waarde met elke waarde in het resultaat van een subquery. De voorwaarde is alleen waar als de vergelijking voor alle geretourneerde waarden geldt.

In dit voorbeeld worden werknemers gevonden van wie het salaris hoger is dan elk salaris in het niveau voor stagiairs — zij verdienen dus meer dan de best betaalde stagiair.

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

ANY versus ALL — naast elkaar

Het belangrijkste verschil: bij ANY moet de voorwaarde waar zijn voor minstens één waarde, terwijl de voorwaarde bij ALL waar moet zijn voor elke waarde.

Je kunt het zo zien: ANY werkt als OR over alle vergelijkingen en ALL als AND over alle vergelijkingen.

-- 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 versus &lt;&gt; ALL

Net zoals = ANY overeenkomt met IN, is de operator <> ALL gelijkwaardig aan NOT IN. Beide retourneren alleen true wanneer de waarde met geen enkele waarde in de subquery overeenkomt.

Let wel op: als de subquery zelfs maar één NULL retourneert, retourneert NOT IN helemaal geen rijen vanwege de drie-waardige logica van SQL.

-- 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');

De NULL-valkuil bij NOT IN

Een belangrijk aandachtspunt: als de subquery die met NOT IN wordt gebruikt een NULL retourneert, wordt de volledige NOT IN-voorwaarde voor elke rij geëvalueerd als UNKNOWN, waardoor het resultaat leeg blijft.

Om dit te voorkomen, filter je NULL-waarden uit de subquery of gebruik je NOT EXISTS — dat veilig met NULL-waarden omgaat.

-- 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
);

Praktijkvoorbeeld: werknemers met een hoog salaris vinden

Laten we de drie operatoren toepassen op een realistisch scenario. We hebben een tabel employees met de kolommen name, department en salary.

We willen werknemers vinden die meer verdienen dan het gemiddelde salaris van minstens één afdeling — dus meer dan het gemiddelde van een willekeurige afdeling.

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

Wanneer gebruik je welke operator?

Hier is een korte handleiding voor de keuze tussen de drie operatoren:

  • IN — wanneer je een statische lijst hebt of eenvoudige gelijkheidsvergelijking met een subquery nodig hebt.
  • = ANY — hetzelfde als IN, maar je kunt ook andere vergelijkingsoperatoren gebruiken, zoals > en <.
  • ALL — wanneer de voorwaarde voor elke waarde moet gelden (bijvoorbeeld groter dan het maximum, zonder MAX te gebruiken).
  • NOT IN — handig, maar let op NULL-waarden; geef de voorkeur aan NOT EXISTS wanneer de subquery NULL-waarden kan bevatten.

Korte controle

Controleer je begrip van IN, ANY en ALL.

Samenvatting van de les

In deze les heb je geleerd hoe je waarden met een verzameling vergelijkt met IN, ANY en ALL.

Belangrijkste punten:

  • IN controleert of een waarde voorkomt — de uitkomst is true als de waarde overeenkomt met een item in de lijst of subquery.
  • = ANY is gelijkwaardig aan IN; met andere operatoren, zoals > ANY, is de uitkomst true bij minstens één overeenkomst.
  • ALL betekent dat de voorwaarde moet gelden voor elke waarde die door de subquery wordt geretourneerd.
  • NOT IN retourneert stilletjes geen rijen wanneer de subquery NULL-waarden bevat — vang dit altijd af.
  • Gebruik NOT EXISTS als veiliger alternatief voor NOT IN wanneer er NULL-waarden kunnen voorkomen.
Gratis beginnen

Leer SQL met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
46
Lessen
183

Veelgestelde vragen

Is de les “IN versus ANY versus ALL” gratis?

Ja — de volledige tekst van “IN versus ANY versus ALL” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.

Wat leer ik in “IN versus ANY versus ALL”?

Vergelijk met sets van waarden. Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met SQL Academy te beginnen?

Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “IN versus ANY versus ALL”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over SQL Academy?

Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Gecorreleerde subquery's
  2. EXISTS en NOT EXISTS
  3. IN versus ANY versus ALL
  4. EXISTS versus JOIN-prestaties
← Terug naar SQL Academy