Exercices SQL corrigés : WHERE et les filtres
Mis à jour le
WHERE garde les lignes qui respectent une condition : =, <>, >, BETWEEN, IN, LIKE, AND, OR, NOT. Ces 15 exercices vont du niveau 1 au niveau 4 ; ils utilisent la syntaxe de SQLite, le moteur SQL de SpeedQL.
Conseil : Les textes et les dates s’écrivent entre apostrophes : department = 'IT'.
Relire la fiche « WHERE (filtres) » de l’aide-mémoire
Exercice 1
Affiche le nom et le salaire des employés du département Finance.
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Finance | 32000 |
| 2 | Bob | IT | 41000 |
| 3 | Claire | Finance | 38000 |
| 4 | David | HR | 29000 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …, …
FROM …
WHERE … = …Voir la correction
SELECT name, salary
FROM employees
WHERE department = 'Finance';Résultat attendu (2 lignes) :
| name | salary |
|---|---|
| Alice | 32000 |
| Claire | 38000 |
Exercice 2
Affiche le nom et le prix des produits de la catégorie 'Audio'.
| id | name | category | price | stock |
|---|---|---|---|---|
| 1 | Keyboard | Office | 25 | 40 |
| 2 | Mouse | Office | 15 | 0 |
| 3 | Screen | Display | 180 | 12 |
| 4 | Headset | Audio | 60 | 8 |
| 5 | Webcam | Office | 45 | 0 |
| 6 | Speaker | Audio | 35 | 25 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …, …
FROM …
WHERE … = …Voir la correction
SELECT name, price
FROM products
WHERE category = 'Audio';Résultat attendu (2 lignes) :
| name | price |
|---|---|
| Headset | 60 |
| Speaker | 35 |
Exercice 3
Affiche le nom des produits de la catégorie 'Office' qui sont en rupture de stock (stock = 0).
| id | name | category | price | stock |
|---|---|---|---|---|
| 1 | Keyboard | Office | 25 | 40 |
| 2 | Mouse | Office | 15 | 0 |
| 3 | Screen | Display | 180 | 12 |
| 4 | Headset | Audio | 60 | 8 |
| 5 | Webcam | Office | 45 | 0 |
| 6 | Speaker | Audio | 35 | 25 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …
FROM …
WHERE … = … AND … = …Voir la correction
SELECT name
FROM products
WHERE category = 'Office' AND stock = 0;Résultat attendu (2 lignes) :
| name |
|---|
| Mouse |
| Webcam |
Exercice 4
Affiche le nom des employés du département IT dont le salaire dépasse 45000.
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Finance | 32000 |
| 2 | Bob | IT | 41000 |
| 3 | Claire | Finance | 38000 |
| 4 | David | HR | 29000 |
| 5 | Emma | IT | 50000 |
| 6 | Farid | IT | 47000 |
| 7 | Gaelle | HR | 33000 |
| 8 | Hugo | Finance | 44000 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …
FROM …
WHERE … = … AND … > …Voir la correction
SELECT name
FROM employees
WHERE department = 'IT' AND salary > 45000;Résultat attendu (2 lignes) :
| name |
|---|
| Emma |
| Farid |
Exercice 5
Affiche le titre des films qui durent entre 100 et 120 minutes (bornes incluses).
| 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 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …
FROM …
WHERE … BETWEEN … AND …Voir la correction
SELECT title
FROM movies
WHERE duration BETWEEN 100 AND 120;Résultat attendu (4 lignes) :
| title |
|---|
| Night Train |
| Blue Harbor |
| Dust and Gold |
| Deep Current |
Exercice 6
Affiche le titre des livres des genres Novel ou Crime publiés après 2010.
| 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 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …
FROM …
WHERE … IN (…, …) AND … > …Voir la correction
SELECT title
FROM books
WHERE genre IN ('Novel', 'Crime') AND year > 2010;Résultat attendu (4 lignes) :
| title |
|---|
| Cold River |
| Winter Ledger |
| Desert Letters |
| Night Garden |
Exercice 7
Affiche le nom et la classe des élèves nés en 2009, par ordre alphabétique du nom.
| id | name | class | birth_date |
|---|---|---|---|
| 1 | Adele | A | 2009-03-14 |
| 2 | Bruno | A | 2008-11-02 |
| 3 | Cyril | B | 2009-07-21 |
| 4 | Dina | B | 2009-01-30 |
| 5 | Elsa | A | 2008-09-12 |
| 6 | Farah | C | 2009-05-05 |
| 7 | Gael | C | 2008-12-24 |
| 8 | Hana | B | 2009-10-10 |
Voir l’indice
Notions à utiliser : WHERE (filtres), ORDER BY, LIMIT.
Structure de la requête :
SELECT …, …
FROM …
WHERE … BETWEEN … AND …
ORDER BY …Voir la correction
SELECT name, class
FROM students
WHERE birth_date BETWEEN '2009-01-01' AND '2009-12-31'
ORDER BY name;Résultat attendu (5 lignes, dans cet ordre) :
| name | class |
|---|---|
| Adele | A |
| Cyril | B |
| Dina | B |
| Farah | C |
| Hana | B |
Exercice 8
Affiche l'id et la durée (en minutes) des vols qui durent plus de 2 heures.
| id | airline | origin | dest | departs | duration_min | price | seats_sold | capacity |
|---|---|---|---|---|---|---|---|---|
| 1 | SkyJet | CDG | MAD | 2025-06-01 08:10 | 125 | 89 | 150 | 180 |
| 2 | AirNova | CDG | LIS | 2025-06-01 11:40 | 155 | 120 | 160 | 170 |
| 3 | BlueWing | LYS | FCO | 2025-06-02 07:30 | 95 | 75 | 110 | 150 |
| 4 | SkyJet | MAD | CDG | 2025-06-02 18:20 | 120 | 95 | 170 | 180 |
| 5 | AirNova | BER | CDG | 2025-06-03 09:05 | 110 | 105 | 140 | 160 |
| 6 | BlueWing | NCE | BER | 2025-06-03 13:50 | 130 | 140 | 90 | 150 |
| 7 | SkyJet | CDG | FCO | 2025-06-04 06:45 | 135 | 99 | 175 | 180 |
| 8 | AirNova | LIS | MAD | 2025-06-04 16:15 | 75 | 65 | 60 | 120 |
| 9 | BlueWing | FCO | LYS | 2025-06-05 20:30 | 100 | 82 | 130 | 150 |
| 10 | SkyJet | CDG | BER | 2025-06-05 10:00 | 105 | 110 | 120 | 180 |
| 11 | AirNova | MAD | LIS | 2025-06-06 12:25 | 80 | 70 | 95 | 120 |
| 12 | BlueWing | LYS | MAD | 2025-06-06 15:40 | 115 | 79 | 100 | 150 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …, …
FROM …
WHERE … > …Voir la correction
SELECT id, duration_min
FROM flights
WHERE duration_min > 120;Résultat attendu (4 lignes) :
| id | duration_min |
|---|---|
| 1 | 125 |
| 2 | 155 |
| 6 | 130 |
| 7 | 135 |
Exercice 9
Affiche le titre et la durée (en secondes) des chansons de plus de 4 minutes, de la plus longue à la plus courte.
| id | title | artist_id | genre | duration_s | released |
|---|---|---|---|---|---|
| 1 | Glass Heart | 1 | Pop | 214 | 2019-04-12 |
| 2 | Low Tide | 1 | Pop | 198 | 2021-06-01 |
| 3 | Rust | 2 | Rock | 256 | 2008-09-30 |
| 4 | Wires | 2 | Rock | 301 | 2015-02-14 |
| 5 | Sunday Market | 3 | Afrobeat | 233 | 2020-11-20 |
| 6 | Palm Wine | 3 | Afrobeat | 245 | 2022-03-03 |
| 7 | Alma | 4 | Latin | 189 | 2013-07-07 |
| 8 | Brisa | 4 | Pop | 205 | 2018-05-25 |
| 9 | Night Drive | 5 | Electro | 276 | 2021-10-10 |
| 10 | Pulse | 5 | Electro | 230 | 2023-01-15 |
Voir l’indice
Notions à utiliser : WHERE (filtres), ORDER BY, LIMIT.
Structure de la requête :
SELECT …, …
FROM …
WHERE … > …
ORDER BY … DESCVoir la correction
SELECT title, duration_s
FROM songs
WHERE duration_s > 240
ORDER BY duration_s DESC;Résultat attendu (4 lignes, dans cet ordre) :
| title | duration_s |
|---|---|
| Wires | 301 |
| Night Drive | 276 |
| Rust | 256 |
| Palm Wine | 245 |
Exercice 10
Affiche la ville, le jour et la température maximale des relevés où il a plu (rain_mm > 0).
| id | city | day | temp_max | temp_min | rain_mm |
|---|---|---|---|---|---|
| 1 | Paris | 2025-07-01 | 24 | 15 | 0 |
| 2 | Paris | 2025-07-02 | 27 | 17 | 0 |
| 3 | Paris | 2025-07-03 | 22 | 16 | 4.5 |
| 4 | Paris | 2025-07-04 | 19 | 14 | 12 |
| 5 | Paris | 2025-07-05 | 23 | 13 | 0 |
| 6 | Lyon | 2025-07-01 | 26 | 16 | 0 |
| 7 | Lyon | 2025-07-02 | 29 | 18 | 0 |
| 8 | Lyon | 2025-07-03 | 31 | 19 | 0 |
| 9 | Lyon | 2025-07-04 | 24 | 17 | 8.5 |
| 10 | Lyon | 2025-07-05 | 22 | 15 | 3 |
| 11 | Marseille | 2025-07-01 | 30 | 21 | 0 |
| 12 | Marseille | 2025-07-02 | 32 | 22 | 0 |
| 13 | Marseille | 2025-07-03 | 33 | 23 | 0 |
| 14 | Marseille | 2025-07-04 | 29 | 21 | 0 |
| 15 | Marseille | 2025-07-05 | 28 | 20 | 0 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …, …, …
FROM …
WHERE … > …Voir la correction
SELECT city, day, temp_max
FROM readings
WHERE rain_mm > 0;Résultat attendu (4 lignes) :
| city | day | temp_max |
|---|---|---|
| Paris | 2025-07-03 | 22 |
| Paris | 2025-07-04 | 19 |
| Lyon | 2025-07-04 | 24 |
| Lyon | 2025-07-05 | 22 |
Exercice 11
Affiche le numéro, la date d'arrivée et la date de départ des réservations dont l'arrivée (check_in) est avant le 2025-07-10.
| id | room_id | guest_id | check_in | check_out |
|---|---|---|---|---|
| 1 | 2 | 1 | 2025-07-01 | 2025-07-04 |
| 2 | 5 | 2 | 2025-07-02 | 2025-07-05 |
| 3 | 8 | 3 | 2025-07-03 | 2025-07-06 |
| 4 | 3 | 4 | 2025-07-05 | 2025-07-12 |
| 5 | 6 | 5 | 2025-07-06 | 2025-07-08 |
| 6 | 1 | 2 | 2025-07-08 | 2025-07-10 |
| 7 | 9 | 3 | 2025-07-10 | 2025-07-11 |
| 8 | 7 | 5 | 2025-07-11 | 2025-07-15 |
| 9 | 4 | 1 | 2025-07-14 | 2025-07-16 |
| 10 | 6 | 4 | 2025-07-15 | 2025-07-19 |
| 11 | 6 | 5 | 2025-07-16 | 2025-07-18 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …, …, …
FROM …
WHERE … < …Voir la correction
SELECT id, check_in, check_out
FROM bookings
WHERE check_in < '2025-07-10';Résultat attendu (6 lignes) :
| id | check_in | check_out |
|---|---|---|
| 1 | 2025-07-01 | 2025-07-04 |
| 2 | 2025-07-02 | 2025-07-05 |
| 3 | 2025-07-03 | 2025-07-06 |
| 4 | 2025-07-05 | 2025-07-12 |
| 5 | 2025-07-06 | 2025-07-08 |
| 6 | 2025-07-08 | 2025-07-10 |
Exercice 12
Affiche le numéro et la date des commandes passées en février 2025.
| id | customer_id | order_date | status |
|---|---|---|---|
| 1 | 1 | 2025-01-05 | shipped |
| 2 | 2 | 2025-01-12 | shipped |
| 3 | 1 | 2025-02-03 | paid |
| 4 | 3 | 2025-02-10 | cancelled |
| 5 | 4 | 2025-02-20 | shipped |
| 6 | 5 | 2025-03-02 | shipped |
| 7 | 2 | 2025-03-15 | paid |
| 8 | 3 | 2025-03-28 | shipped |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …, …
FROM …
WHERE … BETWEEN … AND …Voir la correction
SELECT id, order_date
FROM orders
WHERE order_date BETWEEN '2025-02-01' AND '2025-02-28';Résultat attendu (3 lignes) :
| id | order_date |
|---|---|
| 3 | 2025-02-03 |
| 4 | 2025-02-10 |
| 5 | 2025-02-20 |
Exercice 13
Affiche le nom et le taux horaire des développeurs des équipes Data ou Ops, du taux le plus élevé au plus bas.
| id | name | team | rate |
|---|---|---|---|
| 1 | Ana | Web | 55 |
| 2 | Bo | Web | 48 |
| 3 | Cleo | Data | 62 |
| 4 | Dan | Data | 58 |
| 5 | Eve | Ops | 50 |
| 6 | Finn | Ops | 45 |
Voir l’indice
Notions à utiliser : WHERE (filtres), ORDER BY, LIMIT.
Structure de la requête :
SELECT …, …
FROM …
WHERE … IN (…, …)
ORDER BY … DESCVoir la correction
SELECT name, rate
FROM devs
WHERE team IN ('Data', 'Ops')
ORDER BY rate DESC;Résultat attendu (4 lignes, dans cet ordre) :
| name | rate |
|---|---|
| Cleo | 62 |
| Dan | 58 |
| Eve | 50 |
| Finn | 45 |
Exercice 14
Affiche le numéro, le titulaire et la date d'ouverture des comptes ouverts avant 2022.
| id | owner | city | opened | kind |
|---|---|---|---|---|
| 1 | Alice | Paris | 2021-03-01 | current |
| 2 | Alice | Paris | 2022-06-15 | savings |
| 3 | Bruno | Lyon | 2020-09-10 | current |
| 4 | Chloe | Lyon | 2023-01-20 | current |
| 5 | David | Nice | 2019-11-05 | savings |
| 6 | Emma | Nice | 2024-04-01 | current |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …, …, …
FROM …
WHERE … < …Voir la correction
SELECT id, owner, opened
FROM accounts
WHERE opened < '2022-01-01';Résultat attendu (3 lignes) :
| id | owner | opened |
|---|---|---|
| 1 | Alice | 2021-03-01 |
| 3 | Bruno | 2020-09-10 |
| 5 | David | 2019-11-05 |
Exercice 15
Affiche l'id des factures payées après leur échéance.
| id | client | issued | due | amount | paid_on |
|---|---|---|---|---|---|
| 1 | Acme | 2025-01-15 | 2025-02-14 | 1200 | 2025-02-10 |
| 2 | Acme | 2025-03-01 | 2025-03-16 | 800 | NULL |
| 3 | Bolt | 2025-01-20 | 2025-03-06 | 450 | 2025-03-01 |
| 4 | Bolt | 2025-02-25 | 2025-03-27 | 950 | 2025-04-02 |
| 5 | Cyan | 2025-03-05 | 2025-05-04 | 300 | NULL |
| 6 | Cyan | 2024-12-10 | 2024-12-30 | 600 | 2025-01-05 |
Voir l’indice
Notions à utiliser : WHERE (filtres).
Structure de la requête :
SELECT …
FROM …
WHERE … > …Voir la correction
SELECT id
FROM invoices
WHERE paid_on > due;Résultat attendu (2 lignes) :
| id |
|---|
| 4 |
| 6 |
S’entraîner avec correction automatique
Dans SpeedQL, tu écris ta requête et elle est vérifiée tout de suite, sur ces tables puis sur un jeu de données caché.