Passer au contenu principal
eLearner.app
Module 4 · Leçon 1 sur 413/57 dans le cours~8 min
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 :

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 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 :

SQL
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 :

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

Il existe également NOT IN (...), qui fait l'inverse :

SQL
-- 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 :

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 est inclus sur les deux points de terminaison. Cela fonctionne très bien avec les dates aussi :

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

Essayez-le

Exercice#sql.m4.l1.e1
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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

Exercice#sql.m4.l1.e2
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

WHERE Department_id IN (1, 2, 4) est la version compacte de trois OR.

Solution disponible après 3 tentatives