SQL ORDER BY : trier les résultats
Sans instruction particulière, une base de données renvoie les lignes dans l'ordre qui l'arrange, et cet ordre peut changer d'une exécution à l'autre. Pour obtenir un classement fiable (du moins cher au plus cher, du plus récent au plus ancien, par ordre alphabétique), on ajoute ORDER BY.
Syntaxe
SELECT colonnes
FROM table
ORDER BY colonne1 [ASC|DESC], colonne2 [ASC|DESC];Comment ça marche
ASCtrie par ordre croissant (A → Z, 1 → 9, plus ancien → plus récent). C'est la valeur par défaut : on peut l'omettre.DESCtrie par ordre décroissant.- On peut trier sur plusieurs colonnes : la deuxième ne sert qu'à départager les lignes à égalité sur la première.
ORDER BY se place à la fin de la requête, après WHERE, GROUP BY et HAVING. Comme il est exécuté en dernier (juste avant LIMIT), il peut utiliser les alias définis dans le SELECT.
En SQLite, les valeurs NULL sont considérées comme les plus petites : elles apparaissent en premier en ordre croissant. On peut le changer avec NULLS LAST.
Schéma
| nom | prix |
|---|---|
| Plaid | 25 |
| Clavier | 49 |
| Gourde | 12 |
| nom | prix |
|---|---|
| Clavier | 49 |
| Plaid | 25 |
| Gourde | 12 |
Schéma simplifié pour illustrer le principe. Les exemples ci-dessous utilisent la vraie base d'exercices de SQL Quest (une boutique en ligne fictive : voir le schéma complet).
Exemples avec leurs résultats
1. Ordre croissant
Les produits du moins cher au plus cher.
SELECT nom, prix
FROM produits
ORDER BY prix
LIMIT 8; Essayer dans le bac à sable| nom | prix |
|---|---|
| Miel bio | 3,7 |
| Tapis de yoga | 6,53 |
| Roman policier | 8,03 |
| BD aventure | 9,98 |
| Coussin | 10,86 |
| Ballon de foot | 14,68 |
| Clavier mécanique | 15 |
| Vase céramique | 18,35 |
8 lignes au total
2. Ordre décroissant
Les commandes les plus récentes en premier.
SELECT id, date_commande, statut
FROM commandes
ORDER BY date_commande DESC
LIMIT 6; Essayer dans le bac à sable| id | date_commande | statut |
|---|---|---|
| 473 | 2025-12-28 | livrée |
| 294 | 2025-12-22 | livrée |
| 224 | 2025-12-20 | livrée |
| 371 | 2025-12-20 | expédiée |
| 417 | 2025-12-18 | en cours |
| 509 | 2025-12-18 | livrée |
6 lignes au total
3. Trier sur plusieurs colonnes
Par département (A → Z), puis par salaire décroissant à l'intérieur de chaque département.
SELECT departement, prenom, nom, salaire
FROM employes
ORDER BY departement, salaire DESC
LIMIT 10; Essayer dans le bac à sable| departement | prenom | nom | salaire |
|---|---|---|---|
| Direction | Chloé | Dubois | 9 500 |
| IT | Nathan | Roux | 6 800 |
| IT | Clara | Garcia | 5 100 |
| IT | Inès | Moreau | 4 500 |
| IT | Chloé | Blanc | 3 800 |
| IT | Inès | Faure | 3 600 |
| RH | Louis | Chevalier | 5 300 |
| RH | Chloé | Benali | 4 900 |
| RH | Samir | Simon | 4 800 |
| RH | Chloé | Roux | 3 600 |
10 lignes au total
4. Trier sur un calcul
On peut trier sur un alias défini dans le SELECT.
SELECT nom, prix * stock AS valeur_stock
FROM produits
ORDER BY valeur_stock DESC
LIMIT 5; Essayer dans le bac à sable| nom | valeur_stock |
|---|---|
| Écran 27" | 34 884 |
| SSD 1To | 28 530 |
| Bougie parfumée | 9 564,44 |
| Hub USB-C | 7 938 |
| Souris sans fil | 7 725 |
5 lignes au total
Les erreurs fréquentes
Croire que DESC s'applique à toutes les colonnes
DESC ne vaut que pour la colonne écrite juste avant lui. Ici, departement reste trié en ordre croissant.
SELECT * FROM employes ORDER BY salaire, departement DESC;SELECT * FROM employes ORDER BY salaire DESC, departement DESC;Placer ORDER BY avant WHERE
L'ordre des clauses est imposé : WHERE vient toujours avant ORDER BY.
SELECT * FROM produits ORDER BY prix WHERE stock > 0;SELECT * FROM produits WHERE stock > 0 ORDER BY prix;Compter sur l'ordre naturel de la table
Sans ORDER BY, l'ordre des lignes n'est pas garanti, même s'il semble stable. Ajoutez toujours ORDER BY quand l'ordre compte.
SELECT nom FROM produits LIMIT 3;SELECT nom FROM produits ORDER BY nom LIMIT 3;Exercices
Essayez d'écrire la requête vous-même avant d'ouvrir la solution.
Défi 1. Affichez les clients triés par ville (A → Z), puis par nom.
Voir une solution
SELECT ville, nom, prenom FROM clients ORDER BY ville, nom;| ville | nom | prenom |
|---|---|---|
| Bordeaux | Benali | Lucas |
| Bordeaux | Bernard | Adam |
| Bordeaux | Blanc | Lucas |
| Bordeaux | Bonnet | Rayan |
| Bordeaux | Durand | Omar |
| Bordeaux | Faure | Zoé |
| Bordeaux | Garcia | Camille |
| Bordeaux | Garcia | Camille |
120 lignes au total · 8 affichées
Essayer dans le bac à sableDéfi 2. Affichez les produits du plus grand stock au plus petit.
Voir une solution
SELECT nom, stock FROM produits ORDER BY stock DESC;| nom | stock |
|---|---|
| Gourde inox | 199 |
| Livre de cuisine | 183 |
| Café en grains | 173 |
| Hub USB-C | 162 |
| Raquette | 162 |
| Bougie parfumée | 157 |
| Vase céramique | 128 |
| Corde à sauter | 109 |
29 lignes au total · 8 affichées
Essayer dans le bac à sableLes exercices interactifs sont corrigés automatiquement, avec un prof qui explique vos erreurs. Une leçon résumée reste affichée à côté de l'éditeur.
Questions fréquentes
Quel est l'ordre par défaut de ORDER BY ?
L'ordre croissant (ASC). ORDER BY prix et ORDER BY prix ASC sont identiques.
Peut-on trier sur une colonne qui n'est pas affichée ?
Oui, dans une requête simple. Par exemple SELECT nom FROM produits ORDER BY prix trie par prix sans l'afficher.
Peut-on écrire ORDER BY 2 ?
Oui, le chiffre désigne la position de la colonne dans le SELECT. C'est pratique mais fragile : si vous changez l'ordre des colonnes, le tri change aussi.