10
Chapitre 10 sur 21

Filtrer les résultats (WHERE)

Un SELECT sans filtre affiche souvent trop de lignes. Avec WHERE, vous apprenez à ne garder que les enregistrements utiles : “les livres disponibles”, “les films après 2010”, “les clients de Strasbourg”, etc.

WHERE : sélectionner seulement ce qui vous intéresse

WHERE est la clause qui permet de filtrer les lignes d’un résultat. Sans WHERE, vous récupérez tout. Avec WHERE, vous récupérez uniquement les lignes qui respectent une condition.

🎯

Analogie : filtre sur une liste

Imaginez une liste de 1000 produits. Vous voulez seulement les produits “en stock”. WHERE, c’est le filtre “en stock = oui”.

📖

Définition : WHERE

WHERE limite les lignes renvoyées par une requête. La condition doit être vraie pour qu’une ligne apparaisse dans le résultat.

Structure d’un SELECT avec WHERE

La structure générale :

SELECT colonnes
FROM table
WHERE condition;

Réflexe

Commencez toujours par un SELECT * pour comprendre les données, puis ajoutez WHERE pour obtenir un résultat plus précis.

Les opérateurs de comparaison (les plus importants)

=

Égalité

Tester si une valeur est exactement égale.

SELECT * FROM clients
WHERE ville = 'Strasbourg';

Différence

Selon le SGBD : <> ou !=.

SELECT * FROM livres
WHERE auteur <> 'George Orwell';
>

Supérieur / inférieur

Très utilisé pour les dates et les nombres.

SELECT titre, annee FROM films
WHERE annee >= 2010;
⚠️

Texte / nombres

Texte entre quotes, nombres sans quotes.

WHERE pages > 300
-- et non: pages > '300'

Combiner plusieurs conditions : AND, OR, NOT

-- AND : les deux conditions doivent être vraies
SELECT titre, annee, pages
FROM livres
WHERE annee >= 2000 AND pages > 300;
-- OR : au moins une condition doit être vraie
SELECT nom, ville
FROM clients
WHERE ville = 'Strasbourg' OR ville = 'Colmar';
-- NOT : on inverse la condition
SELECT titre, disponible
FROM livres
WHERE NOT disponible;
🧠

Piège classique : la priorité AND/OR

En SQL, AND est prioritaire sur OR. Quand vous mélangez AND et OR, utilisez des parenthèses pour être explicite.

WHERE (ville = 'Strasbourg' OR ville = 'Colmar')
AND actif = TRUE

Rechercher “à peu près” : LIKE et les jokers % et _

LIKE permet de faire une recherche partielle sur du texte. On utilise généralement : % pour “n’importe quelle suite de caractères”, et _ pour “un seul caractère”.

-- Titre qui commence par 'Du'
SELECT titre
FROM livres
WHERE titre LIKE 'Du%';
-- Email qui contient 'gmail'
SELECT nom, email
FROM clients
WHERE email LIKE '%gmail%';
💡

À savoir

La sensibilité à la casse (maj/min) dépend du SGBD et de la collation. Pour débuter, retenez surtout la logique des jokers % et _.

Filtrer sur une liste ou un intervalle : IN et BETWEEN

-- IN : valeur dans une liste
SELECT titre, categorie
FROM livres
WHERE categorie IN ('Roman', 'Science-fiction');
-- BETWEEN : valeur dans un intervalle (inclusif)
SELECT titre, annee
FROM films
WHERE annee BETWEEN 2000 AND 2010;
📌

Règle importante

BETWEEN inclut les bornes : 2000 et 2010 sont inclus dans l’exemple. Si vous voulez exclure une borne, utilisez plutôt > et <.

Tester les valeurs manquantes : IS NULL / IS NOT NULL

NULL signifie “pas de valeur”. On ne peut pas tester NULL avec =. On utilise IS NULL ou IS NOT NULL.

-- Clients sans email
SELECT nom, prenom, email
FROM clients
WHERE email IS NULL;
-- Clients avec email renseigné
SELECT nom, email
FROM clients
WHERE email IS NOT NULL;
⚠️

NULL n’est pas une chaîne vide

NULL = “aucune valeur”.
'' (chaîne vide) = “valeur existante mais vide”.
Les deux cas doivent parfois être traités différemment.

Guide pas à pas : des filtres utiles sur vos tables

1

Afficher les livres disponibles

Si votre table livres contient une colonne disponible :

SELECT titre, disponible
FROM livres
WHERE disponible = TRUE;

Si vous obtenez une erreur, c’est que votre table n’a pas ce champ (ou pas le même type). Adaptez au nom exact de vos colonnes.

2

Trouver les films récents

SELECT titre, annee, note
FROM films
WHERE annee >= 2015;
3

Rechercher un mot dans un titre

SELECT titre
FROM films
WHERE titre LIKE '%star%';

Testez avec d’autres mots : %man%, %love%, etc.

4

Combiner deux filtres

SELECT titre, annee, note
FROM films
WHERE annee >= 2010 AND note >= 9;

Très bon niveau

Avec SELECT + WHERE, vous êtes déjà capable de faire des requêtes “utiles” pour un site : recherche, filtres, pages de listing, etc.

Erreurs courantes avec WHERE (et comment s’en sortir)

Erreur : guillemets oubliés

Cause : vous testez du texte sans quotes.

-- Faux
WHERE ville = Strasbourg
-- Vrai
WHERE ville = 'Strasbourg'

Erreur : tester NULL avec =

Cause : = NULL ne fonctionne pas.

Solution : utiliser IS NULL.

Résultat inattendu avec AND/OR

Cause : priorité logique.

Solution : parenthèses.

Exercice pratique : “moteur de recherche” simple

Objectif : écrire des requêtes qui ressemblent à un vrai site (filtre + recherche). Travaillez avec films ou livres.

1) Films notés 9 ou plus

SELECT titre, note FROM films
WHERE note >= 9;

2) Films entre 2000 et 2010

SELECT titre, annee FROM films
WHERE annee BETWEEN 2000 AND 2010;

3) Films dont le titre contient “in”

SELECT titre FROM films
WHERE titre LIKE '%in%';

Bonus : combinaison

Films après 2010 ET notés au moins 8.

SELECT titre, annee, note FROM films
WHERE annee > 2010 AND note >= 8;
🧠

Auto-correction

Si vous n’obtenez aucun résultat, ce n’est pas forcément une erreur : votre base peut ne pas contenir de données correspondant au filtre. Changez les valeurs (année, note, mot clé) et observez.

Récapitulatif du chapitre

Ce que vous savez faire

  • Filtrer des lignes avec WHERE
  • Utiliser =, <>, >, <, >=, <=
  • Combiner des conditions avec AND, OR, NOT
  • Rechercher du texte avec LIKE et %
  • Filtrer via IN et BETWEEN
  • Gérer les valeurs manquantes avec IS NULL / IS NOT NULL

Prochain chapitre : vous apprendrez à trier les résultats avec ORDER BY (ordre alphabétique, dates récentes d’abord, notes décroissantes, etc.).