Niveau 4 : Trier, limiter, dédoublonner

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.

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

Résultat de l’exemple

titlerating
Silent Peak8.2
Iron Garden8
Night Train7.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

  1. Guidé · Affiche le titre et l'année des films, du plus ancien au plus récent. (Table : movies)
  2. Entraînement · Affiche la liste des genres de films, sans doublon. (Table : movies)
  3. Entraînement · 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. (Table : movies)
  4. Entraînement · 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. (Table : staff)
  5. Défi · Affiche la compagnie, la destination et le prix du deuxième vol le moins cher au départ de 'CDG'. (Table : flights)

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.

Ouvrir le niveau 4 dans SpeedQL

·