Apprenez en lisant dans l'ordre

DISTINCT, ORDER BY, LIMIT — Mettre en forme l'ensemble de résultats

Apprends SQL DISTINCT, ORDER BY, LIMIT et OFFSET. Couvre la déduplication, le tri, la limite de lignes et la pagination avec OFFSET — tout s'exécute en direct dans ton navigateur sur un jeu de données score chargé depuis CSV.

Les données qu'on va utiliser — la table score chargée depuis CSV

Cet article utilise une table `score` chargée automatiquement depuis un fichier CSV pour parcourir les quatre constructions qui mettent en forme la sortie de SELECTDISTINCT (déduplication), ORDER BY (tri), LIMIT (compte de lignes) et OFFSET (saut depuis le début).

La table score a 5 colonnes — id / name / subject / score / recorded_on — avec 15 lignes au total : 5 étudiants (Alice / Bob / Carol / Dave / Eve) ayant chacun passé 3 matières (Math / English / Science).

Avant les exercices, confirme les définitions de colonnes et un échantillon des données de la table score.

① Lance PRAGMA table_info(score); pour vérifier les noms de colonnes, types et clés primaires.

② Lance SELECT * FROM score LIMIT 5; pour prévisualiser les 5 premières lignes.

Éditeur SQL

Exécutez une requête pour voir les résultats

DISTINCT — ne renvoyer que les lignes uniques

Un résultat de SELECT peut contenir plusieurs fois la même ligne. Par exemple, extraire seulement la colonne name de score renvoie 15 lignes — Alice / Bob / Carol / Dave / Eve, trois matières chacun.

Écrire `SELECT DISTINCT col, ...` fusionne les lignes en doublon en une seule dans l'ensemble de résultats. Avec plusieurs colonnes, les lignes sont considérées comme doublons quand la combinaison de colonnes correspond.

Comment fonctionne DISTINCT
SELECT name FROM score;SELECT DISTINCT name FROM score;AliceAliceAliceBobAliceCarolBobDaveBob ...Eve15 lignes au total (avec doublons)5 lignes au total (après dédup)
Un SELECT sans DISTINCT renvoie les lignes en doublon telles quelles ; avec DISTINCT, les lignes ayant la même valeur fusionnent en une seule.
-- Liste les noms d'étudiants uniques
SELECT DISTINCT name FROM score;

-- Liste les matières uniques
SELECT DISTINCT subject FROM score;

-- Dédup sur la combinaison (name, subject) (= les 15 lignes sont uniques)
SELECT DISTINCT name, subject FROM score;

Lance deux requêtes côte à côte dans une seule console pour voir comment le résultat change avec et sans DISTINCT. (Une fois exécuté correctement, l'explication apparaîtra.)

① Depuis score, extrais la colonne name sans `DISTINCT`.

② Dans la même console, extrais la colonne name avec `DISTINCT`.

③ Confirme que la première renvoie 15 lignes (chaque nom 3 fois), et que la seconde renvoie 5 lignes (doublons fusionnés).

Éditeur SQL

Exécutez une requête pour voir les résultats

ORDER BY — trier le résultat

SQL ne garantit pas l'ordre des lignes par défaut — SELECT * FROM score; laisse l'implémentation de la base décider de l'ordre dans lequel les lignes reviennent. Quand tu veux un ordre spécifique, ajoute `ORDER BY col [ASC|DESC]`.

- ASC (ascendant / petit → grand) est la valeur par défaut et peut être omis

- DESC (descendant / grand → petit) doit être écrit explicitement

- Une liste de plusieurs colonnes séparées par des virgules te donne un tri à plusieurs niveaux : les lignes ex æquo sur la première colonne sont ordonnées par la seconde

ORDER BY ascendant et descendant
Original(sans ordre)ORDER BY score(ASC = ascendant)ORDER BY score DESC(descendant)Alice 92Dave 65Carol 95Bob 76Bob 76Alice 92Carol 95Eve 87Eve 87Dave 65Alice 92Bob 76Eve 87Carol 95Dave 65
Sans ORDER BY, l'ordre n'est pas garanti ; spécifier ASC / DESC produit l'ordre que tu veux. La valeur par défaut est ASC (ascendant).
-- 1) Tri ascendant sur une colonne (ASC peut être omis)
SELECT name, score FROM score ORDER BY score;

-- 2) Tri descendant sur une colonne
SELECT name, score FROM score ORDER BY score DESC;

-- 3) Tri multi-colonnes (par subject, puis du score le plus haut au plus bas dans une matière)
SELECT name, subject, score FROM score ORDER BY subject ASC, score DESC;

Détails sur ORDER BY

- ORDER BY se place après `WHERE` et avant `LIMIT`. Mémorise l'ordre SELECT cols FROM table WHERE condition ORDER BY col DESC LIMIT N; et tu ne te tromperas pas.

- Le côté droit d'ORDER BY accepte un numéro de colonne (ORDER BY 2 DESC trie par la 2e colonne sélectionnée), mais ça nuit à la lisibilité — la convention est d'utiliser les noms de colonnes.

- Dans la console de ce cours, le tri de chaînes est majuscule → minuscule (ordre ASCII). Certaines bases traitent 'A' et 'a' comme équivalents.

Imagine un écran de liste de scores où tu veux les étudiants triés par nom, et dans chaque étudiant la matière au score le plus bas affichée en premier.

① Depuis score, extrais les colonnes name, subject et score.

② Trie par `name` ascendant, et au sein du même name par `score` ascendant.

③ Confirme que le résultat fait 15 lignes, commençant par Alice Science 78 et finissant par Eve English 93.

Éditeur SQL

Exécutez une requête pour voir les résultats

Même ordre de name que l'Exercice 2, mais cette fois tu veux les matières au score le plus haut affichées en premier dans chaque étudiant.

① Depuis score, extrais les colonnes name, subject et score.

② Trie par `name` ascendant, et au sein du même name par `score` descendant.

③ Confirme que le résultat fait 15 lignes, commençant par Alice Math 92 et finissant par Eve Science 86.

Éditeur SQL

Exécutez une requête pour voir les résultats

LIMIT et OFFSET — restreindre le compte et paginer

Quand les ensembles de résultats deviennent gros — 100 lignes, 10 000 lignes — tout déverser à l'écran est lourd et l'utilisateur n'arrive pas à l'absorber. Ajouter `LIMIT N` ne renvoie que les N premières lignes. Combine avec `OFFSET M` pour sauter les M premières lignes puis prendre N, ce qui te donne la pagination pour des choses comme « éléments 6–10 » ou « éléments 11–20 ».

Pagination avec LIMIT et OFFSET
Après ORDER BY(les 7 lignes)LIMIT 3(page 1)LIMIT 3 OFFSET 3(page 2)1er Carol 95prendresauter2e Eve 93prendresauter3e Alice 92prendresauter4e Bob 90prendre5e Bob 88prendre6e Eve 87prendre7e Eve 86
Sur le résultat trié par ORDER BY, LIMIT décide « combien prendre » et OFFSET décide « combien sauter depuis le début ». La formule de base est OFFSET = (numéro de page - 1) × lignes par page.
-- 1) Prendre le top 5 (classement TOP 5)
SELECT name, subject, score FROM score
ORDER BY score DESC
LIMIT 5;

-- 2) Prendre les éléments 6 à 10 (page 2)
SELECT name, subject, score FROM score
ORDER BY score DESC
LIMIT 5 OFFSET 5;

-- 3) Formule de pagination : page N, K lignes par page
--    LIMIT K OFFSET (N - 1) * K
--    ex. page 3, 5 par page → LIMIT 5 OFFSET 10
PageLignes par pageOFFSETLIMITRang ciblé
15051–5
25556–10
3510511–15
1100101–10
210101011–20
1200201–20

LIMIT sans ORDER BY ne garantit pas l'ordre

Écrire juste `LIMIT` en sautant `ORDER BY` comme SELECT * FROM score LIMIT 5; laisse le choix des 5 lignes qui reviennent à l'implémentation de la base. Même sur une base qui tend à renvoyer les lignes dans l'ordre d'insertion (comme SQLite), le standard SQL dit que l'ordre est indéfini. Sous MySQL / PostgreSQL, les index et les plans d'exécution peuvent changer les lignes que tu obtiens.

Pour tout ce où l'ordre compte — classements, pagination, « N premiers éléments » — écris toujours `ORDER BY` avant `LIMIT`.

Imagine un dashboard qui a besoin d'un widget « top 5 toutes matières confondues ».

① Depuis score, extrais les colonnes name, subject et score.

② Trie par `score` descendant, et prends seulement les 5 premières lignes.

③ Confirme que le résultat fait 5 lignes, commençant par Carol Math 95 et finissant par Bob English 88.

Éditeur SQL

Exécutez une requête pour voir les résultats

Imagine un bouton « Voir plus » sur un dashboard qui charge les 5 éléments suivants après le top 5.

① Même ordre de tri que l'Exercice 4 (score descendant), en extrayant les colonnes name, subject et score.

Saute les 5 premières lignes et prends les 5 suivantes (rangs 6–10).

③ Confirme que le résultat fait 5 lignes, commençant par Eve Math 87 et finissant par Alice Science 78.

Éditeur SQL

Exécutez une requête pour voir les résultats
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Laquelle des descriptions suivantes décrit correctement SELECT DISTINCT ?

Question 2Que renvoie SELECT name, score FROM score ORDER BY score DESC; ?

Question 3Quelles lignes renvoie SELECT * FROM score ORDER BY score DESC LIMIT 5 OFFSET 10; ?