🔒 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 :

nom service salaire
Martin Informatique 3200
Durand Comptabilité 2800
Petit Informatique 3600
Moreau Comptabilité 2800
Leroy Informatique 4100

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 :

nom salaire
Durand 2800
Moreau 2800
Martin 3200
Petit 3600
Leroy 4100

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 :

nom service salaire
Moreau Comptabilité 2800
Durand Comptabilité 2800
Leroy Informatique 4100
Petit Informatique 3600
Martin Informatique 3200

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.