Niveau 3 : Combiner des conditions

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.

Table books (10 lignes)
idtitleauthor_idgenrepagesyear
1Cold River1Novel3202011
2Salt Roads2Travel2102016
3The Glass Hive3Sci-Fi4122019
4Winter Ledger1Crime2882014
5Desert Letters2Novel3562020
6Small Engines4Sci-Fi1982022
7Harbor Lights5Novel4452008
8Night Garden3Crime3012017
9Paper Birds5Poetry962012
10Open Maps4Travel2402021

Résultat de l’exemple

titlegenrepages
Cold RiverNovel320
Desert LettersNovel356
Harbor LightsNovel445

À 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

  1. Guidé · Affiche le titre et le nombre de pages des romans (genre 'Novel') de moins de 350 pages. (Table : books)
  2. Entraînement · Affiche la compagnie et la destination des vols à destination de 'MAD', 'LIS' ou 'FCO'. (Table : flights)
  3. Entraînement · Affiche le titre et le nombre de pages des livres qui ont entre 200 et 300 pages (bornes comprises). (Table : books)
  4. Entraînement · Affiche le nom et l'adresse e-mail des contacts dont l'adresse se termine par '@mail.com'. (Table : contacts)
  5. Défi · 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. (Table : loans)

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.

Ouvrir le niveau 3 dans SpeedQL

·