Trier et limiter
Un résultat non trié arrive dans l'ordre d'insertion en base — rarement ce qu'un analyste veut afficher. ORDER BY impose l'ordre de ton choix. Et quand la table entière n'est pas nécessaire, LIMIT coupe au bon endroit.
Mettre de l'ordre dans les résultats
Tu sais maintenant afficher des données (SELECT) et les filtrer (WHERE). Mais l'ordre dans lequel elles apparaissent reste celui de la table, un peu au hasard. Or, on a souvent besoin de trier : afficher les films du mieux noté au moins bien noté, du plus ancien au plus récent…
Et parfois, on ne veut pas toute la liste : juste les trois meilleurs, par exemple. Trier puis limiter, c'est ce qu'on voit dans cette leçon, avec ORDER BY et LIMIT.
Table films
| titre | annee | note | genre | oscar |
|---|---|---|---|---|
| Inception | 2010 | 8.8 | SF | true |
| Le Parrain | 1972 | 9.2 | Drame | true |
| Pulp Fiction | 1994 | 8.9 | Crime | false |
| Amélie Poulain | 2001 | 8.3 | Comédie | false |
ORDER BY : trier les résultats
Pour trier, on ajoute ORDER BY suivi de la colonne sur laquelle trier. SQL réorganise alors les lignes du résultat selon cette colonne. La clause se place après le WHERE (s'il y en a un), vers la fin de la requête.
Trions nos films par note. On verra juste après dans quel sens.
L'ordre croissant (ASC)
Par défaut, ORDER BY trie du plus petit au plus grand : c'est l'ordre croissant. Pour une note, ça donne du moins bien noté au mieux noté :
SELECT titre, note FROM films ORDER BY note| titre | note |
|---|---|
| Amélie Poulain | 8.3 |
| Inception | 8.8 |
| Pulp Fiction | 8.9 |
| Le Parrain | 9.2 |
Les films sont rangés du plus petit au plus grand score. On peut écrire explicitement ORDER BY note ASC (ASC pour *ascending*, croissant), mais comme c'est le comportement par défaut, le ASC est facultatif.
L'ordre décroissant (DESC)
Le plus souvent, on veut l'inverse : les meilleurs en premier. On ajoute alors DESC (*descending*, décroissant) après la colonne :
SELECT titre, note FROM films ORDER BY note DESC| titre | note |
|---|---|
| Le Parrain | 9.2 |
| Pulp Fiction | 8.9 |
| Inception | 8.8 |
| Amélie Poulain | 8.3 |
Cette fois, le mieux noté arrive en tête. Le DESC, lui, n'est jamais facultatif : si tu veux le tri décroissant, tu dois l'écrire.
LIMIT : ne garder qu'un certain nombre
LIMIT suivi d'un nombre ne garde que les N premières lignes du résultat. Très pratique quand une table est énorme et qu'on veut juste un aperçu :
SELECT titre FROM films LIMIT 2| titre |
|---|
| Inception |
| Le Parrain |
On obtient seulement deux lignes. LIMIT se place tout à la fin de la requête. Seul, il coupe la liste un peu arbitrairement (dans l'ordre de la table) — c'est en le combinant avec un tri qu'il devient vraiment utile.
Le « top N » : trier puis limiter
C'est la combinaison la plus courante, et la plus puissante de cette leçon : trier d'abord, limiter ensuite. Le résultat, c'est un classement — le « top 3 », le « top 10 ».
Pour les 2 films les mieux notés, on trie par note décroissante, puis on garde les 2 premiers :
SELECT titre, note FROM films ORDER BY note DESC LIMIT 2| titre | note |
|---|---|
| Le Parrain | 9.2 |
| Pulp Fiction | 8.9 |
L'ordre des clauses compte : d'abord ORDER BY (on classe), ensuite LIMIT (on coupe). SQL trie toute la table, puis prend les 2 premières lignes du classement. Inverser n'aurait pas de sens.
Récapitulatif
En résumé, pour trier et limiter :
SELECT titre, note FROM films ORDER BY note DESC LIMIT 2💡 Bon à savoir : on peut trier sur plusieurs colonnes à la fois (par exemple par genre, puis par note à l'intérieur de chaque genre) en les séparant par une virgule dans le ORDER BY. Un raffinement que tu retrouveras plus loin.
Passe à la pratique
Cette leçon t'a montré la théorie. Pour maîtriser SQL, rien ne vaut la pratique : accède aux exercices et au bac à sable PostgreSQL réel.