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.
Imaginez une liste de 1000 produits. Vous voulez seulement les produits “en stock”.
WHERE, c’est le filtre “en stock = oui”.
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;
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
Combiner plusieurs conditions : AND, OR, NOT
SELECT titre, annee, pages
FROM livres
WHERE annee >= 2000 AND pages > 300;
SELECT nom, ville
FROM clients
WHERE ville = 'Strasbourg' OR ville = 'Colmar';
SELECT titre, disponible
FROM livres
WHERE NOT disponible;
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”.
SELECT titre
FROM livres
WHERE titre LIKE 'Du%';
SELECT nom, email
FROM clients
WHERE email LIKE '%gmail%';
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
SELECT titre, categorie
FROM livres
WHERE categorie IN ('Roman', 'Science-fiction');
SELECT titre, annee
FROM films
WHERE annee BETWEEN 2000 AND 2010;
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.
SELECT nom, prenom, email
FROM clients
WHERE email IS NULL;
SELECT nom, email
FROM clients
WHERE email IS NOT NULL;
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;
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.
WHERE ville = Strasbourg
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;
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
- 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.).