SQL Quest
Se connecter English 0 XP Niv. 1
Débutant

SQL WHERE : filtrer les lignes

4 min de lecture · 4 exemples exécutables · mis à jour le 9 octobre 2026

Une table contient souvent des milliers de lignes, alors qu'on n'en veut que quelques-unes : les clients d'une ville, les produits sous un certain prix, les commandes annulées… La clause WHERE sert exactement à ça : elle ne garde que les lignes qui respectent une condition.

Syntaxe

SELECT colonnes
FROM table
WHERE condition;

Comment ça marche

Pour chaque ligne de la table, SQL évalue la condition du WHERE. Si elle est vraie, la ligne est gardée ; sinon, elle est écartée.

Les opérateurs de comparaison

OpérateurSignificationExemple
=égal àville = 'Lyon'
<> ou !=différent destatut <> 'annulée'
<, >strictement inférieur / supérieurprix < 20
<=, >=inférieur / supérieur ou égalage >= 18

Les textes et les dates s'écrivent entre apostrophes ('Paris', '2025-01-01'), les nombres sans.

Combiner plusieurs conditions

  • AND : les deux conditions doivent être vraies.
  • OR : au moins une des deux doit être vraie.
  • NOT : inverse une condition.

AND est évalué avant OR, comme la multiplication avant l'addition. Dès que vous mélangez les deux, ajoutez des parenthèses pour être sûr du sens de votre requête.

Schéma

clients
prenomville
LéaLyon
HugoParis
InèsLyon
AdamNantes
résultat
prenomville
LéaLyon
InèsLyon
WHERE ville = 'Lyon' : seules les lignes qui respectent la condition sont gardées.

Schéma simplifié pour illustrer le principe. Les exemples ci-dessous utilisent la vraie base d'exercices de SQL Quest (une boutique en ligne fictive : voir le schéma complet).

Exemples avec leurs résultats

1. Une condition simple

Les clients qui habitent à Paris.

SELECT prenom, nom, ville
FROM clients
WHERE ville = 'Paris';
Essayer dans le bac à sable
Résultat
prenomnomville
ZoéLaurentParis
JadeGarciaParis
SarahLambertParis
YanisHaddadParis
ChloéBonnetParis
JadeDuboisParis
LucasDuboisParis
OmarDuboisParis
ClaraLefebvreParis
InèsFontaineParis

13 lignes au total · 10 affichées

2. Comparer des nombres

Les produits qui coûtent moins de 10 €.

SELECT nom, prix
FROM produits
WHERE prix < 10;
Essayer dans le bac à sable
Résultat
nomprix
Tapis de yoga6,53
Roman policier8,03
BD aventure9,98
Miel bio3,7

4 lignes au total

3. Deux conditions avec AND

Les employés du département IT qui gagnent plus de 4 000 €.

SELECT prenom, nom, departement, salaire
FROM employes
WHERE departement = 'IT' AND salaire > 4000;
Essayer dans le bac à sable
Résultat
prenomnomdepartementsalaire
NathanRouxIT6 800
InèsMoreauIT4 500
ClaraGarciaIT5 100

3 lignes au total

4. AND et OR avec des parenthèses

Les produits de sport ou de maison qui coûtent moins de 15 €. Sans les parenthèses, la condition sur le prix ne s'appliquerait qu'à la maison.

SELECT nom, categorie, prix
FROM produits
WHERE (categorie = 'Sport' OR categorie = 'Maison') AND prix < 15;
Essayer dans le bac à sable
Résultat
nomcategorieprix
CoussinMaison10,86
Tapis de yogaSport6,53
Ballon de footSport14,68

3 lignes au total

Les erreurs fréquentes

Oublier les apostrophes autour d'un texte

Sans apostrophes, SQL pense que Paris est un nom de colonne et renvoie l'erreur no such column.

À éviter
SELECT * FROM clients WHERE ville = Paris;
Correct
SELECT * FROM clients WHERE ville = 'Paris';

Mélanger AND et OR sans parenthèses

a OR b AND c se lit a OR (b AND c). Le résultat est souvent différent de ce qu'on voulait.

À éviter
SELECT * FROM produits WHERE categorie = 'Sport' OR categorie = 'Maison' AND prix < 15;
Correct
SELECT * FROM produits WHERE (categorie = 'Sport' OR categorie = 'Maison') AND prix < 15;

Comparer avec = NULL

Une valeur manquante (NULL) ne s'égale à rien, même pas à NULL. Utilisez IS NULL (voir le cours sur NULL).

À éviter
SELECT * FROM clients WHERE age = NULL;
Correct
SELECT * FROM clients WHERE age IS NULL;

Exercices

Essayez d'écrire la requête vous-même avant d'ouvrir la solution.

Défi 1. Affichez les commandes (toutes colonnes) dont le statut est « annulée ».

Voir une solution
SELECT * FROM commandes WHERE statut = 'annulée';
idclient_iddate_commandestatutemploye_id
11032023-06-02annulée6
13772024-06-02annulée6
22842023-02-03annulée25
23822023-05-24annulée8
25502024-09-02annulée9
27182024-10-25annulée24
351012025-04-07annulée14
43572025-11-13annulée18

92 lignes au total · 8 affichées

Essayer dans le bac à sable

Défi 2. Affichez les clients de Lyon âgés de moins de 30 ans.

Voir une solution
SELECT prenom, nom, age FROM clients WHERE ville = 'Lyon' AND age < 30;
prenomnomage
ThéoMichel20

1 ligne au total

Essayer dans le bac à sable
Envie de vous entraîner davantage ?

Les exercices interactifs sont corrigés automatiquement, avec un prof qui explique vos erreurs. Une leçon résumée reste affichée à côté de l'éditeur.

Faire les exercices interactifs

Questions fréquentes

Quelle différence entre WHERE et HAVING ?

WHERE filtre les lignes avant qu'elles soient regroupées ; HAVING filtre les groupes après un GROUP BY. Pour filtrer sur un COUNT ou une SUM, il faut HAVING.

WHERE est-il sensible aux majuscules ?

Avec =, la comparaison de textes tient compte des majuscules et des accents en SQLite : 'paris' n'est pas égal à 'Paris'. LIKE, lui, ignore les majuscules pour les lettres non accentuées.

Peut-on comparer deux colonnes ?

Oui, par exemple WHERE prix_unitaire > prix pour comparer deux colonnes d'une même ligne.

Comment écrire « différent de » ?

Avec <> (standard SQL) ou != (accepté par la plupart des bases, dont SQLite).

À lire ensuite