Niveau 2 : Filtrer les lignes avec WHERE
Mis à jour le
Débutant · niveau 2 sur 20. Objectif : Ne garder que les lignes qui respectent une condition.
Notions : WHERE = <> < > <= >=
Leçon
Une table contient souvent beaucoup plus de lignes que ce qui t'intéresse. WHERE sert à filtrer : il se place après FROM et ne garde que les lignes pour lesquelles la condition est vraie. Les autres disparaissent du résultat, mais restent bien sûr dans la table.
Une condition est une comparaison. On compare une colonne à une valeur avec = (égal), <> (différent), < (inférieur), > (supérieur), <= (inférieur ou égal) et >= (supérieur ou égal). « Au moins 47000 » s'écrit >= 47000, « plus de 47000 » s'écrit > 47000 : la nuance change le résultat dès qu'une valeur vaut exactement 47000.
Un texte s'écrit entre apostrophes simples : 'Drama'. Sans apostrophes, SQL croit que Drama est un nom de colonne. Un nombre s'écrit sans apostrophes : 2018. Avec =, la comparaison de textes respecte les majuscules : 'drama' n'est pas égal à 'Drama'.
On peut aussi comparer deux colonnes de la même ligne : WHERE seats_sold < capacity garde les vols qui ne sont pas pleins. Ou comparer le résultat d'un calcul : WHERE capacity - seats_sold > 40.
Un point essentiel pour la suite : SQL n'exécute pas la requête dans l'ordre où on l'écrit. Il prend d'abord la table (FROM), puis filtre les lignes (WHERE), et seulement ensuite fabrique les colonnes demandées (SELECT). Cet ordre d'exécution explique beaucoup de règles que tu rencontreras plus loin. Par exemple, un alias créé dans le SELECT n'existe pas encore au moment du WHERE : en SQL standard, on réécrit donc le calcul dans le WHERE.
Syntaxe
SELECT colonnes
FROM ma_table
WHERE colonne >= valeur;Exemple commenté
SELECT title, genre
FROM movies
WHERE genre = 'Drama';Seuls les films dont le genre vaut exactement 'Drama' sont gardés.
| id | title | genre | year | duration | rating | director_id |
|---|---|---|---|---|---|---|
| 1 | Night Train | Thriller | 2015 | 118 | 7.8 | 1 |
| 2 | Blue Harbor | Drama | 2018 | 102 | 7.1 | 2 |
| 3 | Paper Moon City | Comedy | 2012 | 95 | 6.4 | 5 |
| 4 | Silent Peak | Drama | 2020 | 131 | 8.2 | 3 |
| 5 | Last Signal | Sci-Fi | 2019 | 142 | 7.5 | 1 |
| 6 | Summer Keys | Comedy | 2016 | 88 | 5.9 | 4 |
| 7 | Iron Garden | Sci-Fi | 2021 | 125 | 8 | 3 |
| 8 | Dust and Gold | Western | 2014 | 110 | 6.8 | 2 |
| 9 | The Quiet Hour | Drama | 2022 | 97 | 7.4 | 5 |
| 10 | Deep Current | Thriller | 2017 | 105 | 6.9 | NULL |
Résultat de l’exemple
| title | genre |
|---|---|
| Blue Harbor | Drama |
| Silent Peak | Drama |
| The Quiet Hour | Drama |
À retenir
- WHERE vient toujours après FROM.
- Texte entre apostrophes, nombre sans apostrophes.
- <> veut dire « différent de ».
Pièges fréquents
- Écrire WHERE genre = Drama sans apostrophes : SQL cherche alors une colonne nommée Drama.
- Confondre > et >= : « au moins 47000 » s'écrit >= 47000.
Spécificité SQLite
SQLite accepte un alias du SELECT dans le WHERE : WHERE empty_seats > 40 fonctionne. PostgreSQL, SQL Server ou Oracle le refusent. Prends l'habitude portable : réécris le calcul dans le WHERE.
Autre différence : avec =, SQLite compare les textes en respectant les majuscules (collation BINARY). MySQL, avec sa collation par défaut, les ignore : 'drama' = 'Drama' y est vrai.
Les 5 exercices du niveau
- Affiche le titre des films de genre 'Comedy'.
- Affiche le titre et l'année des films sortis après 2018 (2018 exclue).
- Affiche le nom et le salaire des employés qui gagnent au moins 47000.
- Affiche le nom et le service des employés qui ne travaillent pas dans le service 'IT'.
- Affiche la compagnie, le départ, l'arrivée et le nombre de places vides (empty_seats) des vols qui ont plus de 40 places vides.
Dans SpeedQL, chaque requête est corrigée tout de suite : le résultat est comparé à celui attendu, puis la requête est relancée sur une base de contrôle cachée. Chaque exercice a ses indices écrits, à afficher seulement si tu bloques.
Voir aussi : la fiche de l’aide-mémoire · les exercices SQL corrigés sur cette notion
Faire les exercices du niveau 2
Gratuit, sans inscription : la leçon et les 5 exercices s’ouvrent directement dans ton navigateur.
← Niveau précédent : Lire une table avec SELECT · Niveau suivant : Combiner des conditions →