🔒 Connexion

Base de données

ORDER BY en SQL : trier les résultats d’une requête (guide complet)

10 septembre 2026 · par Romain RICHER

Par défaut, une requête SQL renvoie les lignes dans un ordre non garanti — souvent celui du stockage, mais sur lequel on ne peut pas compter. Dès qu’on veut un résultat trié (du salaire le plus élevé au plus faible, par ordre alphabétique, du plus récent au plus ancien…), une clause s’impose : ORDER BY. Ce guide explique comment trier sur une ou plusieurs colonnes, gérer les sens et les valeurs NULL, avec des exemples concrets.

Il prolonge naturellement notre article sur les bases de SELECT et WHERE.

Le jeu de données d’exemple

Les exemples s’appuient sur une table employes :

nomservicesalaire
MartinInformatique3200
DurandComptabilité2800
PetitInformatique3600
MoreauComptabilité2800
LeroyInformatique4100

Trier sur une colonne

ORDER BY se place à la fin de la requête et indique la colonne de tri. Par défaut, le tri est croissant. Pour classer les employés par salaire croissant :

SELECT nom, salaire
FROM employes
ORDER BY salaire;

Résultat :

nomsalaire
Durand2800
Moreau2800
Martin3200
Petit3600
Leroy4100

ASC et DESC : le sens du tri

Deux mots-clés précisent le sens : ASC (ascendant, croissant — la valeur par défaut) et DESC (descendant, décroissant). Pour classer du mieux payé au moins payé :

SELECT nom, salaire
FROM employes
ORDER BY salaire DESC;

Résultat : Leroy (4100), Petit (3600), Martin (3200), puis Durand et Moreau (2800). Le tri fonctionne aussi sur du texte (ordre alphabétique) et sur des dates (chronologique) :

SELECT nom FROM employes ORDER BY nom ASC;

Ce qui donne l’ordre alphabétique : Durand, Leroy, Martin, Moreau, Petit.

Trier sur plusieurs colonnes

On peut enchaîner plusieurs critères, séparés par des virgules. SQL trie d’abord sur la première colonne ; en cas d’égalité, il départage avec la suivante. Pour trier par service, puis par salaire décroissant à l’intérieur de chaque service :

SELECT nom, service, salaire
FROM employes
ORDER BY service ASC, salaire DESC;

Résultat :

nomservicesalaire
MoreauComptabilité2800
DurandComptabilité2800
LeroyInformatique4100
PetitInformatique3600
MartinInformatique3200

Chaque colonne a son propre sens : ici service croissant, mais salaire décroissant. On peut mélanger ASC et DESC librement.

Trier par position ou par alias

Deux raccourcis pratiques. On peut désigner la colonne de tri par sa position dans le SELECT (1 = première colonne) :

SELECT nom, salaire
FROM employes
ORDER BY 2 DESC;   -- trie sur salaire (2e colonne)

Et contrairement au WHERE, ORDER BY accepte un alias défini dans le SELECT, car il s’exécute après. C’est utile pour trier sur un calcul :

SELECT nom, salaire * 12 AS salaire_annuel
FROM employes
ORDER BY salaire_annuel DESC;

La place des valeurs NULL

Les valeurs NULL (absentes) doivent bien se ranger quelque part. Leur position par défaut dépend du moteur : Oracle et PostgreSQL les placent en dernier en tri croissant, MySQL et SQL Server en premier. Pour maîtriser ce comportement, certains SGBD (Oracle, PostgreSQL) offrent la clause NULLS FIRST / NULLS LAST :

SELECT nom, salaire
FROM employes
ORDER BY salaire DESC NULLS LAST;

Cela garantit que les salaires inconnus apparaissent après les valeurs renseignées, quel que soit le moteur qui le supporte.

ORDER BY et performances

Trier a un coût, surtout sur de gros volumes. Deux réflexes utiles : un index sur la colonne de tri accélère considérablement l’opération ; et si vous ne voulez que les premières lignes (le top 10), limitez le résultat avec FETCH FIRST 10 ROWS ONLY (Oracle, standard SQL) ou LIMIT 10 (MySQL, PostgreSQL), après le ORDER BY.

L’ordre des clauses

ORDER BY est toujours la dernière clause de la requête :

SELECT   colonnes
FROM     table
WHERE    condition
GROUP BY colonnes
ORDER BY tri;

En résumé

ORDER BY trie le résultat d’une requête : croissant par défaut, décroissant avec DESC, sur une ou plusieurs colonnes départagées dans l’ordre, y compris sur des alias ou des positions. Surveillez la place des NULL, qui varie selon les moteurs, et pensez aux index et à la limitation du nombre de lignes pour les gros volumes. C’est la clause qui transforme un résultat brut en une liste enfin exploitable. Pour aller plus loin, voyez les jointures et le regroupement GROUP BY.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les commentaires sont modérés avant publication.