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:
-- 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:
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:
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');Er is ook NOT IN (...), wat het tegenovergestelde doet:
-- 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:
-- 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:
-- 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
Toon voornaam (voornaam), achternaam (achternaam) en salaris (salaris) van werknemers met een salaris tussen 30000 en 50000 inclusief. Drie kolommen.
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
Vermeld de voornaam (voornaam) en achternaam (achternaam) van medewerkers werkzaam op afdeling 1, 2 of 4 (gebruik IN). Alfabetisch gerangschikt op achternaam.
Toon hint
WHERE afdeling_id IN (1, 2, 4) is de compacte versie van drie OK's.
Oplossing beschikbaar na 3 pogingen