Niveau 3 : Combiner des conditions
Mis à jour le
Débutant · niveau 3 sur 20. Objectif : Écrire des filtres à plusieurs conditions et chercher dans du texte.
Notions : AND OR parenthèses IN BETWEEN LIKE IS NULL
Leçon
Un filtre a souvent plusieurs critères. AND relie deux conditions qui doivent être vraies toutes les deux : genre = 'Novel' AND pages > 300 garde les romans de plus de 300 pages. OR se contente d'une des deux : dest = 'MAD' OR dest = 'LIS' garde les vols vers Madrid et ceux vers Lisbonne. NOT inverse une condition.
Quand on mélange AND et OR, AND est évalué en premier, comme la multiplication avant l'addition. a = 1 OR a = 2 AND b = 3 se lit donc a = 1 OR (a = 2 AND b = 3). Dès qu'une requête mélange les deux, mets des parenthèses : elles rendent ton intention explicite et évitent des erreurs silencieuses.
Deux raccourcis rendent les filtres plus lisibles. IN teste l'appartenance à une liste : dest IN ('MAD', 'LIS') remplace la suite de OR, et NOT IN fait l'inverse. BETWEEN a AND b garde les valeurs comprises entre a et b, bornes incluses : pages BETWEEN 200 AND 300 équivaut à pages >= 200 AND pages <= 300.
LIKE cherche un motif dans un texte. Le signe % remplace n'importe quelle suite de caractères, même vide, et _ remplace exactement un caractère. email LIKE '%@mail.com' trouve les adresses qui se terminent par @mail.com ; name LIKE 'A%' trouve les noms qui commencent par A ; name LIKE '____' (quatre _) trouve les noms d'exactement quatre lettres.
Enfin, une case vide contient NULL, qui signifie « valeur inconnue ». NULL n'est égal à rien, pas même à lui-même : WHERE email = NULL ne renvoie jamais aucune ligne. Pour tester une case vide, on écrit IS NULL, et IS NOT NULL pour une case remplie. Le niveau 12 explique en détail pourquoi.
Syntaxe
SELECT colonnes
FROM ma_table
WHERE (a = 1 OR a = 2) AND b BETWEEN 10 AND 20 AND c LIKE 'D%' AND d IS NULL;Exemple commenté
SELECT title, genre, pages
FROM books
WHERE genre = 'Novel' AND pages > 300;Il faut que les deux conditions soient vraies : un roman ET plus de 300 pages.
| id | title | author_id | genre | pages | year |
|---|---|---|---|---|---|
| 1 | Cold River | 1 | Novel | 320 | 2011 |
| 2 | Salt Roads | 2 | Travel | 210 | 2016 |
| 3 | The Glass Hive | 3 | Sci-Fi | 412 | 2019 |
| 4 | Winter Ledger | 1 | Crime | 288 | 2014 |
| 5 | Desert Letters | 2 | Novel | 356 | 2020 |
| 6 | Small Engines | 4 | Sci-Fi | 198 | 2022 |
| 7 | Harbor Lights | 5 | Novel | 445 | 2008 |
| 8 | Night Garden | 3 | Crime | 301 | 2017 |
| 9 | Paper Birds | 5 | Poetry | 96 | 2012 |
| 10 | Open Maps | 4 | Travel | 240 | 2021 |
Résultat de l’exemple
| title | genre | pages |
|---|---|---|
| Cold River | Novel | 320 |
| Desert Letters | Novel | 356 |
| Harbor Lights | Novel | 445 |
À retenir
- AND : les deux conditions ; OR : au moins une.
- IN (liste), BETWEEN (bornes incluses), LIKE avec % et _.
- NULL se teste avec IS NULL, jamais avec = NULL.
Pièges fréquents
- a = 1 OR a = 2 AND b = 3 se lit a = 1 OR (a = 2 AND b = 3) : mets des parenthèses.
- WHERE email = NULL ne renvoie jamais rien.
Spécificité SQLite
Dans SQLite, LIKE ne distingue pas les majuscules des minuscules (pour les lettres sans accent) : name LIKE 'alice%' trouve « Alice Martin ». Le signe =, lui, les distingue. Dans PostgreSQL, LIKE distingue la casse et c'est ILIKE qui l'ignore.
Les 5 exercices du niveau
- Affiche le titre et le nombre de pages des romans (genre 'Novel') de moins de 350 pages.
- Affiche la compagnie et la destination des vols à destination de 'MAD', 'LIS' ou 'FCO'.
- Affiche le titre et le nombre de pages des livres qui ont entre 200 et 300 pages (bornes comprises).
- Affiche le nom et l'adresse e-mail des contacts dont l'adresse se termine par '@mail.com'.
- Affiche les prêts pas encore rendus (return_date vide) des membres 3 et 4 : identifiant du prêt, membre et date de prêt.
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 3
Gratuit, sans inscription : la leçon et les 5 exercices s’ouvrent directement dans ton navigateur.
← Niveau précédent : Filtrer les lignes avec WHERE · Niveau suivant : Trier, limiter, dédoublonner →