Leçons du module (1/4)
Listes et plages : IN et BETWEEN
Dans les modules précédents, vous avez filtré avec WHERE en utilisant des égalités et
comparaisons : salary > 30000, department_id = 1, hired_on >= '2020-01-01'.
Mais lorsque la condition devient "la valeur doit être l'une de ces cinq",
Les OR enchaînés s'accumulent :
-- 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 propose deux raccourcis pour rendre cela lisible.
IN — "l'un d'entre eux"
L'opérateur IN (...) prend une liste de valeurs et renvoie true si le
la colonne est égale à n'importe lequel d'entre eux :
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);Il est sémantiquement identique aux OR ci-dessus, mais beaucoup plus lisible : il
se lit naturellement comme "où department_id est dans (1, 2, 3)". Ça marche aussi
avec des chaînes et des dates :
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');Il existe également NOT IN (...), qui fait l'inverse :
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM employees
WHERE department_id NOT IN (1, 2);BETWEEN — "entre A et B, tous deux inclus"
Lorsque la condition est une plage continue (nombres, dates), au lieu de
en écrivant column >= A AND column <= B vous avez 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 est inclus sur les deux points de terminaison. Cela fonctionne très bien avec
les dates aussi :
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM employees
WHERE hired_on BETWEEN '2020-01-01' AND '2020-12-31';Essayez-le
Afficher le prénom (first_name), le nom (last_name) et le salaire (salaire) des salariés dont le salaire est compris entre 30 000 et 50 000 inclus. Trois colonnes.
Afficher l'indice
Utilisez ENTRE 30 000 ET 50 000 — plus compact et lisible que deux comparaisons reliées par AND.
Solution disponible après 3 tentatives
Exercice de révision
Indiquez le prénom (first_name) et le nom (last_name) des employés travaillant dans les services 1, 2 ou 4 (utilisez IN). Classer par ordre alphabétique par nom de famille.
Afficher l'indice
WHERE Department_id IN (1, 2, 4) est la version compacte de trois OR.
Solution disponible après 3 tentatives