Exercices SQL corrigés : WHERE et les filtres

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 · niveau 1

Affiche le nom et le salaire des employés du département Finance.

Table employees (4 lignes)
idnamedepartmentsalary
1AliceFinance32000
2BobIT41000
3ClaireFinance38000
4DavidHR29000
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) :

namesalary
Alice32000
Claire38000

Exercice 2 · niveau 1

Affiche le nom et le prix des produits de la catégorie 'Audio'.

Table products (6 lignes)
idnamecategorypricestock
1KeyboardOffice2540
2MouseOffice150
3ScreenDisplay18012
4HeadsetAudio608
5WebcamOffice450
6SpeakerAudio3525
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) :

nameprice
Headset60
Speaker35

Exercice 3 · niveau 2

Affiche le nom des produits de la catégorie 'Office' qui sont en rupture de stock (stock = 0).

Table products (6 lignes)
idnamecategorypricestock
1KeyboardOffice2540
2MouseOffice150
3ScreenDisplay18012
4HeadsetAudio608
5WebcamOffice450
6SpeakerAudio3525
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 · niveau 2

Affiche le nom des employés du département IT dont le salaire dépasse 45000.

Table employees (8 lignes)
idnamedepartmentsalary
1AliceFinance32000
2BobIT41000
3ClaireFinance38000
4DavidHR29000
5EmmaIT50000
6FaridIT47000
7GaelleHR33000
8HugoFinance44000
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 · niveau 2

Affiche le titre des films qui durent entre 100 et 120 minutes (bornes incluses).

Table movies (10 lignes)
idtitlegenreyeardurationratingdirector_id
1Night TrainThriller20151187.81
2Blue HarborDrama20181027.12
3Paper Moon CityComedy2012956.45
4Silent PeakDrama20201318.23
5Last SignalSci-Fi20191427.51
6Summer KeysComedy2016885.94
7Iron GardenSci-Fi202112583
8Dust and GoldWestern20141106.82
9The Quiet HourDrama2022977.45
10Deep CurrentThriller20171056.9NULL
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 · niveau 2

Affiche le titre des livres des genres Novel ou Crime publiés après 2010.

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
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 · niveau 2

Affiche le nom et la classe des élèves nés en 2009, par ordre alphabétique du nom.

Table students (8 lignes)
idnameclassbirth_date
1AdeleA2009-03-14
2BrunoA2008-11-02
3CyrilB2009-07-21
4DinaB2009-01-30
5ElsaA2008-09-12
6FarahC2009-05-05
7GaelC2008-12-24
8HanaB2009-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) :

nameclass
AdeleA
CyrilB
DinaB
FarahC
HanaB

Exercice 8 · niveau 2

Affiche l'id et la durée (en minutes) des vols qui durent plus de 2 heures.

Table flights (12 lignes)
idairlineorigindestdepartsduration_minpriceseats_soldcapacity
1SkyJetCDGMAD2025-06-01 08:1012589150180
2AirNovaCDGLIS2025-06-01 11:40155120160170
3BlueWingLYSFCO2025-06-02 07:309575110150
4SkyJetMADCDG2025-06-02 18:2012095170180
5AirNovaBERCDG2025-06-03 09:05110105140160
6BlueWingNCEBER2025-06-03 13:5013014090150
7SkyJetCDGFCO2025-06-04 06:4513599175180
8AirNovaLISMAD2025-06-04 16:15756560120
9BlueWingFCOLYS2025-06-05 20:3010082130150
10SkyJetCDGBER2025-06-05 10:00105110120180
11AirNovaMADLIS2025-06-06 12:25807095120
12BlueWingLYSMAD2025-06-06 15:4011579100150
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) :

idduration_min
1125
2155
6130
7135

Exercice 9 · niveau 2

Affiche le titre et la durée (en secondes) des chansons de plus de 4 minutes, de la plus longue à la plus courte.

Table songs (10 lignes)
idtitleartist_idgenreduration_sreleased
1Glass Heart1Pop2142019-04-12
2Low Tide1Pop1982021-06-01
3Rust2Rock2562008-09-30
4Wires2Rock3012015-02-14
5Sunday Market3Afrobeat2332020-11-20
6Palm Wine3Afrobeat2452022-03-03
7Alma4Latin1892013-07-07
8Brisa4Pop2052018-05-25
9Night Drive5Electro2762021-10-10
10Pulse5Electro2302023-01-15
Voir l’indice

Notions à utiliser : WHERE (filtres), ORDER BY, LIMIT.

Structure de la requête :

SELECT , 
FROM 
WHERE  > 
ORDER BY  DESC
Voir 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) :

titleduration_s
Wires301
Night Drive276
Rust256
Palm Wine245

Exercice 10 · niveau 2

Affiche la ville, le jour et la température maximale des relevés où il a plu (rain_mm > 0).

Table readings (15 lignes)
idcitydaytemp_maxtemp_minrain_mm
1Paris2025-07-0124150
2Paris2025-07-0227170
3Paris2025-07-0322164.5
4Paris2025-07-04191412
5Paris2025-07-0523130
6Lyon2025-07-0126160
7Lyon2025-07-0229180
8Lyon2025-07-0331190
9Lyon2025-07-0424178.5
10Lyon2025-07-0522153
11Marseille2025-07-0130210
12Marseille2025-07-0232220
13Marseille2025-07-0333230
14Marseille2025-07-0429210
15Marseille2025-07-0528200
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) :

citydaytemp_max
Paris2025-07-0322
Paris2025-07-0419
Lyon2025-07-0424
Lyon2025-07-0522

Exercice 11 · niveau 2

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.

Table bookings (11 lignes)
idroom_idguest_idcheck_incheck_out
1212025-07-012025-07-04
2522025-07-022025-07-05
3832025-07-032025-07-06
4342025-07-052025-07-12
5652025-07-062025-07-08
6122025-07-082025-07-10
7932025-07-102025-07-11
8752025-07-112025-07-15
9412025-07-142025-07-16
10642025-07-152025-07-19
11652025-07-162025-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) :

idcheck_incheck_out
12025-07-012025-07-04
22025-07-022025-07-05
32025-07-032025-07-06
42025-07-052025-07-12
52025-07-062025-07-08
62025-07-082025-07-10

Exercice 12 · niveau 2

Affiche le numéro et la date des commandes passées en février 2025.

Table orders (8 lignes)
idcustomer_idorder_datestatus
112025-01-05shipped
222025-01-12shipped
312025-02-03paid
432025-02-10cancelled
542025-02-20shipped
652025-03-02shipped
722025-03-15paid
832025-03-28shipped
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) :

idorder_date
32025-02-03
42025-02-10
52025-02-20

Exercice 13 · niveau 2

Affiche le nom et le taux horaire des développeurs des équipes Data ou Ops, du taux le plus élevé au plus bas.

Table devs (6 lignes)
idnameteamrate
1AnaWeb55
2BoWeb48
3CleoData62
4DanData58
5EveOps50
6FinnOps45
Voir l’indice

Notions à utiliser : WHERE (filtres), ORDER BY, LIMIT.

Structure de la requête :

SELECT , 
FROM 
WHERE  IN (, )
ORDER BY  DESC
Voir la correction
SELECT name, rate
FROM devs
WHERE team IN ('Data', 'Ops')
ORDER BY rate DESC;

Résultat attendu (4 lignes, dans cet ordre) :

namerate
Cleo62
Dan58
Eve50
Finn45

Exercice 14 · niveau 2

Affiche le numéro, le titulaire et la date d'ouverture des comptes ouverts avant 2022.

Table accounts (6 lignes)
idownercityopenedkind
1AliceParis2021-03-01current
2AliceParis2022-06-15savings
3BrunoLyon2020-09-10current
4ChloeLyon2023-01-20current
5DavidNice2019-11-05savings
6EmmaNice2024-04-01current
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) :

idowneropened
1Alice2021-03-01
3Bruno2020-09-10
5David2019-11-05

Exercice 15 · niveau 4

Affiche l'id des factures payées après leur échéance.

Table invoices (6 lignes)
idclientissueddueamountpaid_on
1Acme2025-01-152025-02-1412002025-02-10
2Acme2025-03-012025-03-16800NULL
3Bolt2025-01-202025-03-064502025-03-01
4Bolt2025-02-252025-03-279502025-04-02
5Cyan2025-03-052025-05-04300NULL
6Cyan2024-12-102024-12-306002025-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é.

S’entraîner sur les 31 questions « WHERE (filtres) »