⌂  Menu général
Chapitre Bases de données

SQL : interroger la base

SELECT, WHERE, ORDER BY, DISTINCT : les quatre outils de base pour poser des questions à une base de données — et une enquête à résoudre pour se mettre en jambes.

Durée · 2h Séance · 4 / 7 Outil · DB Browser for SQLite
Au programme

Objectifs de la séance

  • Écrire des requêtes SELECT pour afficher des colonnes précises.
  • Filtrer des résultats avec WHERE (comparaisons, AND/OR/NOT, BETWEEN, IN, LIKE).
  • Trier des résultats avec ORDER BY.
  • Éliminer les doublons avec DISTINCT.
Activité d'accroche

Résoudre une enquête... en SQL

SQL Murder Mystery

Avant même de voir la syntaxe formelle, on mène une enquête policière à coups de requêtes SELECT / WHERE. Chaque indice trouvé mène au suivant, jusqu'au nom du coupable.

Ressource : mystery.knightlab.com

Avant de commencer

Réinitialiser sa base

Pour que tout le monde travaille sur les mêmes données, exécute ce script dans billetterie.db (il efface les tables existantes) puis ré-exécute les CREATE TABLE et INSERT des séances précédentes.

DROP TABLE IF EXISTS BILLET; DROP TABLE IF EXISTS CONCERT; DROP TABLE IF EXISTS SPECTATEUR; DROP TABLE IF EXISTS SALLE; DROP TABLE IF EXISTS ARTISTE;

État de référence retrouvé après réinsertion :

TableContenu de référence
ARTISTE(1,DJ Solstice,Électro) (2,Les Foudres,Rock) (3,Miles & Co,Jazz)
SALLE(1,Zénith,Lyon) (2,Stade des Lumières,Lyon) (3,Le Trianon,Paris)
SPECTATEUR(1,Léa Martin,...) (2,Noah Petit,...) (3,Inès Dubois,...)
CONCERT(1,Nuit Électro,09-12,1,1) (2,Rock en Seine,09-20,2,2) (3,Jazz...,09-25,3,3)
BILLET(1,1,1,45) (2,2,1,45) (3,1,2,38) (4,3,1,45) (5,2,3,30) (6,3,2,38)
Cours

La requête SELECT

SELECT colonne1, colonne2 FROM table; SELECT * FROM table; -- * = toutes les colonnes
Cours + Exercice 1

Filtrer avec WHERE

= <> < > <= >=

Comparaisons classiques.

AND / OR / NOT

Combiner plusieurs conditions.

BETWEEN ... AND ...

Un intervalle de valeurs.

IN (v1, v2, ...)

Appartenance à une liste.

LIKE 'motif'

Recherche approchée : % = suite de caractères, _ = un seul caractère.

SELECT * FROM BILLET WHERE prix > 40; SELECT * FROM ARTISTE WHERE genre IN ('Rock', 'Jazz'); SELECT nom_spectateur FROM SPECTATEUR WHERE nom_spectateur LIKE 'L%';
a. Billets à plus de 40€
SELECT * FROM BILLET WHERE prix > 40;
→ billets 1, 2, 4 (prix 45).
b. Concerts après le 15/09/2026
SELECT * FROM CONCERT WHERE date_concert > '2026-09-15';
→ Rock en Seine (20/09) et Jazz sous les étoiles (25/09).
c. Emails contenant « mail.fr »
SELECT * FROM SPECTATEUR WHERE email LIKE '%mail.fr%';
→ les trois spectateurs.
d. Défi — billets dont le prix n'est pas 45
SELECT * FROM BILLET WHERE prix <> 45;
→ billets 3 (38), 5 (30), 6 (38).
Cours + Exercice 2

Trier avec ORDER BY

SELECT * FROM table ORDER BY colonne ASC; -- croissant (défaut) SELECT * FROM table ORDER BY colonne DESC; -- décroissant
a. Billets du plus cher au moins cher
SELECT * FROM BILLET ORDER BY prix DESC;
b. Spectateurs par ordre alphabétique
SELECT * FROM SPECTATEUR ORDER BY nom_spectateur ASC;
c. Défi — concerts triés par date
SELECT * FROM CONCERT ORDER BY date_concert ASC;
Cours + Exercice 3

Éliminer les doublons : DISTINCT

SELECT DISTINCT colonne FROM table;
a. Prix distincts pratiqués
SELECT DISTINCT prix FROM BILLET;
→ 45, 38, 30 — chaque valeur une seule fois.
b. Villes distinctes
SELECT DISTINCT ville FROM SALLE;
→ Lyon, Paris — Lyon n'apparaît qu'une fois bien que deux salles y soient situées.
À ton rythme

Exercices gradués

Niveau 1

Affiche le nom et l'email de tous les spectateurs, triés par ordre alphabétique.

Voir la correction
SELECT nom_spectateur, email FROM SPECTATEUR ORDER BY nom_spectateur ASC;
Niveau 2

Affiche tous les billets dont le prix est compris entre 35 et 45€, triés du moins cher au plus cher.

Voir la correction
SELECT * FROM BILLET WHERE prix BETWEEN 35 AND 45 ORDER BY prix ASC;
→ billets à 38 et 45 (le billet à 30 est exclu).
Niveau 3 — défi

Affiche les noms des artistes dont le genre commence par « R » ou dont le nom contient un espace.

Voir la correction
SELECT nom_artiste FROM ARTISTE WHERE genre LIKE 'R%' OR nom_artiste LIKE '% %';
→ « Les Foudres » (genre Rock) et « Miles & Co » (contient un espace).
Bilan

Vocabulaire clé de la séance

SELECT FROM WHERE AND / OR / NOT BETWEEN IN LIKE ORDER BY DISTINCT
Séance 5

La suite : combiner les tables

Les jointures (JOIN) pour relier plusieurs tables entre elles, et les fonctions d'agrégation (COUNT, SUM, AVG, GROUP BY, HAVING).