Tutoriels gratuits et ouverts à toutes et à tous · conçus au Lycée Chevrollier — AngersÀ propos

Série « Le langage SQL » · partie 2 / 4

Nos premières requêtes SQL : SELECT, WHERE, ORDER BY

Interroger une base de données : projection, alias et DISTINCT, filtres avec WHERE (comparateurs, AND/OR, BETWEEN, IN, LIKE, IS NULL), tri avec ORDER BY, LIMIT et ordre réel d’exécution d’une requête.

Bases de données✎ B. Jousseaume📅 18 octobre 2026⏱ 2 h📶 Débutant

Partie 1 — Afficher des données

SELECT est le mot-clé de base de toute requête : il permet d’afficher des données depuis une table.

1.1 — SELECT * : tout afficher

L’étoile * signifie « toutes les colonnes ». FROM indique la table dans laquelle chercher.

SELECT *
FROM etudiant;

1.2 — Choisir ses colonnes (projection)

On demande uniquement les colonnes utiles, séparées par des virgules, dans l’ordre de son choix.

SELECT nom, prenom
FROM etudiant;

Q1. Écris la requête qui affiche uniquement le numéro de classe (id_classe) et la moyenne de chaque élève.

1.3 — Renommer à l’affichage : AS

Le mot-clé AS renomme une colonne dans le résultat affiché, sans jamais modifier la table elle-même.

SELECT nom AS "Nom de famille",
       prenom AS "Prénom"
FROM etudiant;

1.4 — Éliminer les doublons : DISTINCT

DISTINCT supprime les lignes strictement identiques dans le résultat affiché.

SELECT DISTINCT id_classe
FROM etudiant;

Q2. Sans DISTINCT, combien de lignes la requête SELECT id_classe FROM etudiant renvoie-t-elle sur notre table (5 élèves) ? Et avec DISTINCT ?

1.5 — Bilan de la partie 1

InstructionEffet
SELECT * FROM table;Affiche toutes les colonnes de toutes les lignes
SELECT col1, col2 FROM table;Affiche uniquement les colonnes choisies (projection)
SELECT col AS "Nom" FROM table;Renomme une colonne à l’affichage, sans toucher la table
SELECT DISTINCT col FROM table;Supprime les doublons dans le résultat

Partie 2 — Filtrer avec WHERE

WHERE filtre les lignes selon une condition : seules les lignes qui la vérifient apparaissent dans le résultat.

2.1 — Les opérateurs de comparaison

OpérateurSignification
=égal à
<> ou !=différent de
< / >strictement inférieur / supérieur
<= / >=inférieur / supérieur ou égal
SELECT nom, moyenne
FROM etudiant
WHERE moyenne >= 12;

2.2 — Combiner des conditions : AND, OR, NOT

AND est évalué avant OR, comme la multiplication avant l’addition : utilisez des parenthèses en cas de doute.

SELECT nom FROM etudiant
WHERE id_classe = 1
  AND moyenne >= 12;

Q3. Écris une requête qui affiche le nom des élèves de la classe 1 (SISR1) OU de la classe 2 (SISR2).

2.3 — Des raccourcis pratiques : BETWEEN et IN

SELECT nom FROM etudiant
WHERE moyenne BETWEEN 10 AND 15;

Équivaut à : moyenne >= 10 AND moyenne <= 15 (les deux bornes sont incluses).

SELECT nom FROM etudiant
WHERE id_classe IN (1, 2);

Équivaut à : id_classe = 1 OR id_classe = 2, bien plus lisible dès que la liste s’allonge. NOT BETWEEN et NOT IN existent aussi.

2.4 — Chercher un motif de texte : LIKE

  • % remplace zéro, un ou plusieurs caractères
  • _ remplace exactement un caractère
ConditionRésultat
WHERE nom LIKE 'M%'noms commençant par M (Martin…)
WHERE nom LIKE '%in'noms se terminant par « in » (Martin…)
WHERE nom LIKE '%ar%'noms contenant « ar » n’importe où

2.5 — Le cas particulier de NULL

NULL ne signifie pas « zéro » ni « vide » : il signifie « valeur inconnue ou non renseignée ».

WHERE moyenne IS NULL
WHERE moyenne IS NOT NULL

Q4. Écris une requête qui affiche le nom des élèves qui ONT une moyenne renseignée.

2.6 — Bilan de la partie 2

OpérateurUsage
=, <>, <, >, <=, >=Comparer une colonne à une valeur
AND, OR, NOTCombiner ou inverser des conditions
BETWEEN … AND …Tester une plage de valeurs (bornes incluses)
IN (…)Tester l’appartenance à une liste de valeurs
LIKE avec % et _Chercher un motif dans du texte
IS NULL / IS NOT NULLTester l’absence ou la présence d’une valeur

Partie 3 — Trier et limiter

Deux clauses pour organiser et cadrer le résultat d’une requête.

3.1 — ORDER BY : trier les lignes

Tri croissant par défaut (ASC) ; DESC inverse l’ordre.

SELECT nom, moyenne
FROM etudiant
ORDER BY moyenne DESC;

3.2 — Trier sur plusieurs colonnes

La seconde colonne ne sert qu’à départager les lignes égales sur la première.

SELECT id_classe, nom
FROM etudiant
ORDER BY id_classe, nom;

Q5. Écris une requête qui trie les élèves par classe, puis par moyenne décroissante à l’intérieur de chaque classe.

3.3 — LIMIT : cadrer le résultat

LIMIT réduit le nombre de lignes renvoyées : très utile combiné à un ORDER BY, pour un classement par exemple.

SELECT nom, moyenne
FROM etudiant
ORDER BY moyenne DESC
LIMIT 2;

3.4 — Bilan de la partie 3

ClauseEffet
ORDER BY colonne;Trie par ordre croissant (ASC, par défaut)
ORDER BY colonne DESC;Trie par ordre décroissant
ORDER BY col1, col2;Trie sur plusieurs colonnes, dans l’ordre indiqué
LIMIT n;Ne garde que les n premières lignes du résultat

Partie 4 — Anatomie d’une requête SELECT

Le point technique clé de ce cours : comprendre ce qui se passe réellement quand SQL s’exécute.

4.1 — Ordre d’écriture ≠ ordre d’exécution

On écrit une requête dans un certain ordre, mais le SGBD ne l’exécute pas dans cet ordre :

Ce qu’on écritCe qui s’exécute
1. SELECT1. FROM
2. FROM2. WHERE
3. WHERE3. SELECT
4. ORDER BY4. ORDER BY

4.2 — Pourquoi cette requête échoue

SELECT moyenne * 5 AS note_sur_100
FROM etudiant
WHERE note_sur_100 > 50;   -- erreur !

Q6. D’après ce que tu viens de lire, pourquoi cette requête échoue-t-elle ? Comment la corriger ?

4.3 — Erreurs fréquentes de débutant

ErreurConséquence
Oublier le point-virguleBloque dès qu’on enchaîne plusieurs requêtes.
Guillemets doubles pour du texteEn SQL standard : 'Martin', pas "Martin".
Confondre = et ==SQL utilise = pour tester l’égalité, jamais ==.
Utiliser = avec NULLToujours IS NULL / IS NOT NULL.

Synthèse — Ce qu’il faut retenir

SELECT nom, prenom, moyenne * 5 AS note_sur_100   -- 3. quelles colonnes
FROM etudiant                                     -- 1. dans quelle table
WHERE id_classe = 1 AND moyenne IS NOT NULL       -- 2. quelles lignes
ORDER BY moyenne DESC                             -- 4. dans quel ordre
LIMIT 3;                                          -- 5. combien de lignes

Auto-évaluation rapide

Q1. Comment afficher uniquement les colonnes nom et moyenne d’une table etudiant ?

Q2. Quelle instruction utiliser pour tester qu’une colonne n’a pas de valeur renseignée ?

Q3. Dans quel ordre le SGBD exécute-t-il réellement les clauses d’une requête SELECT … FROM … WHERE … ORDER BY ?

Q4. Quelle clause permet de ne garder que les 5 premières lignes d’un résultat trié ?

🧠 Testez vos connaissances

5 questions. Répondez puis cliquez sur « Corriger ». Rien n’est enregistré : c’est de l’auto-évaluation.

1. Comment tester qu’une colonne n’a pas de valeur renseignée ?

💬 NULL ne se compare jamais avec = : le résultat est « inconnu », jamais vrai.

2. Dans quel ordre le SGBD exécute-t-il réellement SELECT … FROM … WHERE … ORDER BY ?

💬 C’est pourquoi un alias défini dans SELECT n’est pas utilisable dans WHERE, mais l’est dans ORDER BY.

3. Que renvoie WHERE nom LIKE 'M%' ?

💬 % remplace zéro, un ou plusieurs caractères ; _ remplace exactement un caractère.

4. BETWEEN 10 AND 15 inclut-il les bornes 10 et 15 ?

💬 Équivaut à moyenne >= 10 AND moyenne <= 15.

5. Pourquoi éviter SELECT * en usage réel ?

💬 SELECT * reste pratique pour explorer une table ; en production, on liste les colonnes utiles.

© 2026 Bruno Jousseaume. Ce cours est publié sous licence CC BY-NC-SA 4.0 : vous pouvez le partager et l’adapter en citant l’auteur et un lien vers cette page, sans usage commercial, et en partageant vos adaptations sous la même licence.

Pour aller plus loin