Leçon 2.2 Filtrage des données avec la clause WHERE
L'instruction SELECT retourne toutes les lignes d'une table par défaut. Cependant, dans la pratique, vous avez souvent besoin d'un sous-ensemble de données répondant à des critères précis. C'est là qu'intervient la clause WHERE.
Qu'est-ce que la clause WHERE ?
La clause WHERE permet de filtrer les enregistrements. Elle garantit que seules les lignes satisfaisant une condition donnée sont incluses dans le résultat.
Syntaxe de base
SELECT column1, column2, ...
FROM table_name
WHERE condition;
La condition est une expression qui évalue à vrai, faux ou inconnu (si des valeurs NULL sont impliquées). Seules les lignes pour lesquelles la condition est vraie sont retournées.
Les opérateurs de comparaison
SQL propose divers opérateurs pour comparer des valeurs dans la clause WHERE :
| Opérateur | Description | Exemple |
|---|---|---|
= | Égal à | WHERE last_name = 'SMITH' |
<> ou != | Différent de | WHERE store_id <> 1 |
> | Supérieur à | WHERE rental_rate > 2.99 |
< | Inférieur à | WHERE length < 60 |
>= | Supérieur ou égal à | WHERE replacement_cost >= 20.00 |
<= | Inférieur ou égal à | WHERE amount <= 5.00 |
Exemple (base Sakila)
Pour trouver les films dont le tarif de location est de 4,99 $ dans la table film :
SELECT title, rental_rate, replacement_cost
FROM film
WHERE rental_rate = 4.99;
Opérateurs de filtrage spéciaux
SQL inclut des opérateurs puissants pour filtrer par plage, liste ou motif.
1. BETWEEN
Filtre les valeurs dans une plage donnée (inclusif).
-- Trouver les paiements entre 5,00 $ et 10,00 $
SELECT payment_id, amount, payment_date
FROM payment
WHERE amount BETWEEN 5.00 AND 10.00;
2. IN
Recherche une valeur dans une liste spécifiée.
-- Trouver les clients de certains magasins
SELECT first_name, last_name, store_id
FROM customer
WHERE store_id IN (1, 2);
3. LIKE
Recherche un motif dans une colonne à l'aide de jokers :
%représente zéro, un ou plusieurs caractères._représente un seul caractère.
Exemple (base Sakila)
-- Trouver les films commençant par 'A'
SELECT title
FROM film
WHERE title LIKE 'A%';
-- Trouver les films dont la deuxième lettre est 'I'
SELECT title
FROM film
WHERE title LIKE '_I%';
Attention : filtrer les valeurs NULL
Comme vu dans la leçon sur les NULL, on ne peut pas utiliser = ou <> pour tester NULL. Il faut utiliser IS NULL ou IS NOT NULL.
Exemple (base Sakila)
-- Incorrect
-- WHERE return_date = NULL
-- Correct
SELECT rental_id, rental_date, return_date
FROM rental
WHERE return_date IS NULL;
Points clés de cette leçon :
- La clause
WHEREfiltre les lignes avant qu'elles ne soient retournées dans le résultat. - Les valeurs de type chaîne ou date doivent être entourées de guillemets simples (ex.
'SMITH'). - Les valeurs numériques n'ont pas besoin de guillemets.
- Utilisez
LIKEpour la recherche par motif etINpour la recherche dans une liste. - Ne jamais utiliser
=avecNULL; toujours utiliserIS NULL.
Dans la prochaine leçon, nous verrons comment combiner plusieurs conditions pour créer des filtres encore plus puissants.