Exercices SQL corrigés : SELECT, alias et DISTINCT

Exercices SQL corrigés : SELECT, alias et DISTINCT

Mis à jour le

SELECT choisit les colonnes à afficher ; AS renomme une colonne, DISTINCT retire les doublons. Ces 4 exercices du jeu sont de niveau 1, et 5 exercices du cours suivent ; ils utilisent la syntaxe de SQLite, le moteur SQL de SpeedQL.

Conseil : Liste les colonnes utiles plutôt que SELECT * : le résultat est plus lisible et plus rapide.

Relire la fiche « SELECT, alias, DISTINCT » de l’aide-mémoire

Exercice 1 · niveau 1

Affiche toutes les colonnes et toutes les lignes de la table employees.

Table employees (4 lignes)
idnamedepartmentsalary
1AliceFinance32000
2BobIT41000
3ClaireFinance38000
4DavidHR29000
Voir l’indice

Notions à utiliser : SELECT, alias, DISTINCT.

Structure de la requête :

SELECT *
FROM …
Voir la correction
SELECT *
FROM employees;

Résultat attendu (4 lignes) :

idnamedepartmentsalary
1AliceFinance32000
2BobIT41000
3ClaireFinance38000
4DavidHR29000

Exercice 2 · niveau 1

Affiche uniquement le nom et le salaire de tous les employés.

Table employees (4 lignes)
idnamedepartmentsalary
1AliceFinance32000
2BobIT41000
3ClaireFinance38000
4DavidHR29000
Voir l’indice

Notions à utiliser : SELECT, alias, DISTINCT.

Structure de la requête :

SELECT …, …
FROM …
Voir la correction
SELECT name, salary
FROM employees;

Résultat attendu (4 lignes) :

namesalary
Alice32000
Bob41000
Claire38000
David29000

Exercice 3 · niveau 1

Affiche le nom des employés dans une colonne nommée employee, et leur salaire dans une colonne nommée annual_salary.

Table employees (4 lignes)
idnamedepartmentsalary
1AliceFinance32000
2BobIT41000
3ClaireFinance38000
4DavidHR29000
Voir l’indice

Notions à utiliser : SELECT, alias, DISTINCT.

Structure de la requête :

SELECT … AS …, … AS …
FROM …
Voir la correction
SELECT name AS employee, salary AS annual_salary
FROM employees;

Résultat attendu (4 lignes) :

employeeannual_salary
Alice32000
Bob41000
Claire38000
David29000

Exercice 4 · niveau 1

Affiche la liste des catégories de produits, sans doublon.

Table products (6 lignes)
idnamecategorypricestock
1KeyboardOffice2540
2MouseOffice150
3ScreenDisplay18012
4HeadsetAudio608
5WebcamOffice450
6SpeakerAudio3525
Voir l’indice

Notions à utiliser : SELECT, alias, DISTINCT.

Structure de la requête :

SELECT DISTINCT …
FROM …
Voir la correction
SELECT DISTINCT category
FROM products;

Résultat attendu (3 lignes) :

category
Office
Display
Audio

Plus d’exercices : niveau 1 du cours SQL, « Lire une table avec SELECT »

Ces 5 exercices viennent du niveau 1 du cours, sur d’autres tables. Chacun a des indices écrits et sa correction, repliés par défaut.

Exercice 5 · cours, niveau 1 · Guidé

Affiche toutes les colonnes de la table movies.

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 les indices

Indice : L'étoile * remplace la liste de toutes les colonnes.

Voir la correction
SELECT *
FROM movies;

Résultat attendu (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

SELECT * est le moyen le plus rapide de découvrir le contenu d'une table.

Exercice 6 · cours, niveau 1 · Entraînement

Affiche le titre et le genre de chaque film.

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 les indices

Indice 1 · piste : Liste les colonnes voulues juste après SELECT.

Indice 2 · méthode : Sépare les deux colonnes par une virgule : SELECT title, genre …

Voir la correction
SELECT title, genre
FROM movies;

Résultat attendu (10 lignes) :

titlegenre
Night TrainThriller
Blue HarborDrama
Paper Moon CityComedy
Silent PeakDrama
Last SignalSci-Fi
Summer KeysComedy
Iron GardenSci-Fi
Dust and GoldWestern
The Quiet HourDrama
Deep CurrentThriller

Les colonnes apparaissent dans l'ordre où tu les écris.

Exercice 7 · cours, niveau 1 · Entraînement

Affiche le titre de chaque film dans une colonne nommée film, et sa durée dans une colonne nommée minutes.

Les noms de colonnes demandés comptent.

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 les indices

Indice 1 · piste : Un alias se place juste après la colonne qu'il renomme.

Indice 2 · méthode : Ajoute AS film après title, et AS minutes après duration.

Voir la correction
SELECT title AS film, duration AS minutes
FROM movies;

Résultat attendu (10 lignes) :

filmminutes
Night Train118
Blue Harbor102
Paper Moon City95
Silent Peak131
Last Signal142
Summer Keys88
Iron Garden125
Dust and Gold110
The Quiet Hour97
Deep Current105

Un alias ne change que le nom affiché : la table, elle, n'est pas modifiée.

Exercice 8 · cours, niveau 1 · Entraînement

Affiche le nom et le prix de chaque plat, ainsi que le prix pour deux personnes dans une colonne nommée price_for_two.

Les noms de colonnes demandés comptent.

Table dishes (8 lignes)
idnamecategorypricecaloriesvegetarianchef_id
1Ratatouillemain14.5320yes1
2Beef burgermain16780no2
3Caesar saladstarter9.5410no1
4Tomato soupstarter7180yes3
5Chocolate cakedessert6.5520yes2
6Lemon tartdessert6430yes3
7Grilled salmonmain19560no1
8Onion soupstarter8290yes2
Voir les indices

Indice 1 · piste : Un calcul peut s'écrire directement dans la liste du SELECT, comme une colonne.

Indice 2 · méthode : Une colonne calculée : price * 2 AS price_for_two.

Voir la correction
SELECT name, price, price * 2 AS price_for_two
FROM dishes;

Résultat attendu (8 lignes) :

namepriceprice_for_two
Ratatouille14.529
Beef burger1632
Caesar salad9.519
Tomato soup714
Chocolate cake6.513
Lemon tart612
Grilled salmon1938
Onion soup816

Le calcul est refait pour chaque ligne de la table.

Exercice 9 · cours, niveau 1 · Défi

Pour chaque vol, affiche la compagnie, la recette du vol (revenue : prix × places vendues) et le manque à gagner dû aux places restées vides (lost_revenue : prix × places vides).

Les noms de colonnes demandés comptent.

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 les indices

Indice 1 · piste : Calcule d'abord le nombre de places vides, puis multiplie-le par le prix. Attention à l'ordre des opérations.

Indice 2 · méthode : Les places vides valent capacity - seats_sold : mets ce calcul entre parenthèses avant de le multiplier par price.

Voir la correction
SELECT airline,
       price * seats_sold AS revenue,
       price * (capacity - seats_sold) AS lost_revenue
FROM flights;

Résultat attendu (12 lignes) :

airlinerevenuelost_revenue
SkyJet133502670
AirNova192001200
BlueWing82503000
SkyJet16150950
AirNova147002100
BlueWing126008400
SkyJet17325495
AirNova39003900
BlueWing106601640
SkyJet132006600
AirNova66501750
BlueWing79003950

Sans parenthèses, price * capacity - seats_sold calcule (price × capacity) − seats_sold : la multiplication passe avant la soustraction.

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 4 questions « SELECT, alias, DISTINCT »