Direct naar de hoofdinhoud
Module 4 · Les 1 van 413/57 in de cursus~8 min
Modulelessen (1/4)

Lijsten en bereiken: IN en BETWEEN

In de vorige modules filterde je met WHERE met behulp van gelijkheden en vergelijkingen: salary > 30000, department_id = 1, hired_on >= '2020-01-01'. Maar als de voorwaarde "wordt, moet de waarde een van deze vijf zijn", geketende ORs stapelen zich op:

SQL
-- Heavy and fragile: adding a department means touching the query
SELECT first_name, last_name
FROM   employees
WHERE  department_id = 1
   OR  department_id = 2
   OR  department_id = 3;

SQL biedt twee snelkoppelingen om dit leesbaar te maken.

IN - "een van deze"

De operator IN (...) neemt een lijst met waarden en retourneert true als kolom is gelijk aan any ervan:

SQL
SELECT first_name, last_name, department_id
FROM   employees
WHERE  department_id IN (1, 2, 3);

Het is semantisch identiek aan de ORs hierboven, maar veel leesbaarder: het leest natuurlijk als "waarbij department_id in (1, 2, 3)" staat. Het werkt ook met snaren en datums:

SQL
SELECT name
FROM   departments
WHERE  city IN ('Milano', 'Roma');

Er is ook NOT IN (...), wat het tegenovergestelde doet:

SQL
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM   employees
WHERE  department_id NOT IN (1, 2);

BETWEEN - "tussen A en B, beide inclusief"

Wanneer de voorwaarde een doorlopend bereik is (getallen, datums), in plaats van schrijven column >= A AND column <= B je hebt BETWEEN A AND B:

SQL
-- Employees with a salary between 30000 and 50000 (both inclusive):
SELECT first_name, last_name, salary
FROM   employees
WHERE  salary BETWEEN 30000 AND 50000;

BETWEEN is inclusief op beide eindpunten. Het werkt heel fijn mee data ook:

SQL
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM   employees
WHERE  hired_on BETWEEN '2020-01-01' AND '2020-12-31';

Probeer het

Oefening#sql.m4.l1.e1
Pogingen: 0Laden…

Toon voornaam (voornaam), achternaam (achternaam) en salaris (salaris) van werknemers met een salaris tussen 30000 en 50000 inclusief. Drie kolommen.

Editor laden…
Toon hint

Gebruik TUSSEN 30.000 EN 50.000 – compacter en leesbaarder dan twee vergelijkingen gecombineerd met AND.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#sql.m4.l1.e2
Pogingen: 0Laden…

Vermeld de voornaam (voornaam) en achternaam (achternaam) van medewerkers werkzaam op afdeling 1, 2 of 4 (gebruik IN). Alfabetisch gerangschikt op achternaam.

Editor laden…
Toon hint

WHERE afdeling_id IN (1, 2, 4) is de compacte versie van drie OK's.

Oplossing beschikbaar na 3 pogingen