Niveau 4 : Trier, limiter, dédoublonner
Mis à jour le
Débutant · niveau 4 sur 20. Objectif : Présenter les résultats dans l'ordre voulu, n'en garder que les premiers et supprimer les doublons.
Notions : ORDER BY ASC DESC LIMIT OFFSET DISTINCT
Leçon
Sans ORDER BY, l'ordre des lignes du résultat n'est pas garanti : il peut sembler stable, mais il peut changer d'une exécution ou d'une version du moteur à l'autre. Dès que l'ordre compte, on l'écrit.
ORDER BY colonne trie du plus petit au plus grand : c'est ASC, le tri par défaut. Pour les textes, c'est l'ordre alphabétique ; pour les dates au format 'AAAA-MM-JJ', l'ordre chronologique. DESC trie du plus grand au plus petit.
On peut trier sur plusieurs colonnes : la deuxième ne sert qu'à départager les égalités de la première. ORDER BY department, salary DESC range les employés par service, puis, dans chaque service, du mieux au moins bien payé. Chaque colonne a son propre sens de tri.
LIMIT n ne garde que les n premières lignes, après le tri. C'est ainsi qu'on obtient un podium : ORDER BY rating DESC LIMIT 3. OFFSET k saute d'abord k lignes : LIMIT 1 OFFSET 1 donne la deuxième ligne. Sans ORDER BY, LIMIT garde des lignes quelconques.
SELECT DISTINCT supprime les lignes en double du résultat. Il porte sur la ligne entière : SELECT DISTINCT city, country garde chaque couple (ville, pays) différent.
Les valeurs NULL n'ont pas de place naturelle dans un tri. SQLite les met en premier dans un tri croissant et en dernier dans un tri décroissant ; PostgreSQL fait l'inverse. Pour choisir, on écrit NULLS FIRST ou NULLS LAST : ORDER BY director_id NULLS LAST.
Ordre d'écriture des clauses : SELECT, FROM, WHERE, ORDER BY, LIMIT. ORDER BY est exécuté après SELECT : contrairement au WHERE, il peut donc utiliser un alias.
Syntaxe
SELECT DISTINCT colonnes
FROM ma_table
WHERE …
ORDER BY colonne DESC
LIMIT 3 OFFSET 0;Exemple commenté
SELECT title, rating
FROM movies
ORDER BY rating DESC
LIMIT 3;On trie par note décroissante puis on garde les 3 premières lignes : le podium des films.
| id | title | genre | year | duration | rating | director_id |
|---|---|---|---|---|---|---|
| 1 | Night Train | Thriller | 2015 | 118 | 7.8 | 1 |
| 2 | Blue Harbor | Drama | 2018 | 102 | 7.1 | 2 |
| 3 | Paper Moon City | Comedy | 2012 | 95 | 6.4 | 5 |
| 4 | Silent Peak | Drama | 2020 | 131 | 8.2 | 3 |
| 5 | Last Signal | Sci-Fi | 2019 | 142 | 7.5 | 1 |
| 6 | Summer Keys | Comedy | 2016 | 88 | 5.9 | 4 |
| 7 | Iron Garden | Sci-Fi | 2021 | 125 | 8 | 3 |
| 8 | Dust and Gold | Western | 2014 | 110 | 6.8 | 2 |
| 9 | The Quiet Hour | Drama | 2022 | 97 | 7.4 | 5 |
| 10 | Deep Current | Thriller | 2017 | 105 | 6.9 | NULL |
Résultat de l’exemple
| title | rating |
|---|---|
| Silent Peak | 8.2 |
| Iron Garden | 8 |
| Night Train | 7.8 |
À retenir
- ASC (croissant) est le tri par défaut, DESC le tri décroissant.
- Ordre des clauses : SELECT, FROM, WHERE, ORDER BY, LIMIT.
- DISTINCT s'écrit juste après SELECT.
Pièges fréquents
- LIMIT sans ORDER BY donne des lignes « au hasard ».
- En cas d'égalité, ajoute une deuxième colonne de tri pour obtenir un ordre stable.
- Les NULL arrivent en tête d'un tri croissant dans SQLite : filtre-les ou ajoute NULLS LAST.
Les 5 exercices du niveau
- Affiche le titre et l'année des films, du plus ancien au plus récent.
- Affiche la liste des genres de films, sans doublon.
- Affiche le titre et l'identifiant du réalisateur (director_id) de chaque film, triés par identifiant croissant, avec les films sans réalisateur à la fin. À identifiant égal, trie par titre.
- Affiche le nom, le service et le salaire des employés, triés par service (ordre alphabétique), puis par salaire décroissant, puis par nom.
- Affiche la compagnie, la destination et le prix du deuxième vol le moins cher au départ de 'CDG'.
Dans SpeedQL, chaque requête est corrigée tout de suite : le résultat est comparé à celui attendu, puis la requête est relancée sur une base de contrôle cachée. Chaque exercice a ses indices écrits, à afficher seulement si tu bloques.
Voir aussi : la fiche de l’aide-mémoire · les exercices SQL corrigés sur cette notion
Faire les exercices du niveau 4
Gratuit, sans inscription : la leçon et les 5 exercices s’ouvrent directement dans ton navigateur.
← Niveau précédent : Combiner des conditions · Niveau suivant : Résumer une table : les agrégats →