Les résultats d’une requête SQL (Query) arrivent souvent dans un ordre aléatoire. Dans le langage SQL, la clause ORDER BY trie les enregistrements selon des critères précis et définis par le développeur. Cette clause apparaît toujours en fin de requête après toutes les autres clauses afin d’organiser les données de manière logique et prévisible.
Table des matières
Définition et syntaxe de base pour réaliser des requêtes avec la clause SQL ORDER BY
La clause ORDER BY trie les résultats d’une requête selon une ou plusieurs colonnes séparées par une virgule. Elle utilise les mots-clés ASC pour croissant et DESC pour décroissant. ASC représente l’ordre par défaut lorsque le développeur omet cette précision. La base de données examine chaque ligne et les réorganise selon le critère spécifié.
SELECT * FROM table ORDER BY field;
Position de la clause ORDER BY dans l’ordre d’exécution de la requête
La clause ORDER BY occupe la dernière position dans l’ordre logique d’écriture. Elle suit FROM, WHERE, GROUP BY et HAVING, ce qui permet au développeur de structurer la requête de manière intuitive. Cette position garantit que le tri utilise le résultat final complet, alors que les autres clauses préparent les données avant le tri final.
L’ordre d’exécution réel traite ORDER BY en dernier, car la base de données applique d’abord tous les filtres et calculs. Ensuite seulement, elle trie l’ensemble des résultats sélectionnés, ce qui optimise les performances du système. Tous les SGBD modernes optimisent automatiquement l’ordre de traitement interne.
Syntaxe SQL et options de tri pour filtrer les résultats de la requête
Créer une requête avec un tri croissant (ASC)
Le mot-clé ASC permet de trier les données dans l’ordre alphabétique ou numérique croissant. Cette option constitue le comportement par défaut d’ORDER BY. Les nombres passent de 1 à 9, les lettres de A à Z. La requête classe les employés du salaire le plus faible au plus élevé. ASC convient parfaitement pour les listes chronologiques ou hiérarchiques car la base de données place toujours les valeurs NULL en début ou fin selon le SGBD.
SELECT nom, salaire
FROM employes
ORDER BY salaire ASC;
Exécuter des requêtes avec un tri décroissant (DESC)
DESC inverse l’ordre naturel des données, ainsi les ventes passent des plus élevées au plus faibles. DESC s’utilise fréquemment pour les classements et top 10.
SELECT produit, ventes
FROM statistiques
ORDER BY ventes DESC;
Réaliser des requêtes avec un tri multi-colonnes
Un tri multi-colonnes classe d’abord par la première colonne puis par la seconde en cas d’égalité. Chaque colonne supplémentaire affine le classement. La requête suivante trie d’abord par ville puis par chiffre d’affaires décroissant dans chaque ville.
SELECT ville, nom, chiffre_affaires
FROM clients
ORDER BY ville ASC, chiffre_affaires DESC;
Écrire des requêtes plus complexes avec un tri par position de colonne
ORDER BY accepte le numéro de colonne dans une requête SELECT à la place du nom ce qui raccourcit la longueur des requêtes. Cette syntaxe trie par la 3ème colonne (age) puis la 2ème (ville). Les numéros correspondent à la position dans le SELECT. Cette méthode fonctionne avec tous les SGBD.
SELECT nom, ville, age
FROM clients
ORDER BY 3 DESC, 2 ASC;
Requêtes utilisant un tri avec expressions calculées
ORDER BY trie aussi sur des calculs ou fonctions appliquées aux colonnes. La requête ci-dessous classe les ventes par montant total calculé. L’expression total n’existe pas dans la table source, c’est la base de données qui calcule cette valeur avant le tri.
SELECT nom, prix * quantite AS total
FROM ventes
ORDER BY total DESC;
Simple requête avec ORDER BY et GROUP BY
ORDER BY fonctionne très bien avec GROUP BY pour trier les résultats agrégés qui regroupe les lignes similaires avant le tri final. Le résultat de la requête classe les villes par nombre de clients décroissant. GROUP BY calcule d’abord les totaux par ville et ORDER BY trie ensuite ces totaux agrégés.
Sans ORDER BY, les résultats GROUP BY arrivent dans l’ordre arbitraire de la table. Cette absence de tri complique l’analyse des regroupements.
SELECT ville, COUNT(*) AS nb_clients
FROM clients
GROUP BY ville
ORDER BY nb_clients DESC;
Cas d’usage avancés avec ORDER BY
Création d’une requête de sélection pour une pagination avec LIMIT/OFFSET
La pagination divise les résultats en pages numérotées. ORDER BY garantit un ordre stable des résultats des requêtes entre les pages. LIMIT limite le nombre de lignes retournées. Le mot-clé OFFSET saute le nombre de lignes spécifié et ORDER BY assure que la page 2 suit exactement la page 1.
Le même ORDER BY s’impose pour toutes les pages d’une pagination car un changement d’ordre briserait la continuité entre les pages.
-- Page 1 : 1-10
SELECT nom, email
FROM clients
ORDER BY nom ASC
LIMIT 10 OFFSET 0;
-- Page 2 : 11-20
SELECT nom, email
FROM clients
ORDER BY nom ASC
LIMIT 10 OFFSET 10;
Effectuer une requête avec un tri et jointure simple ou multiple
Les jointures complexes nécessitent souvent un tri sophistiqué sur plusieurs tables et de spécifier la clé primaire et l’alias. Lorsque cette requête s’exécute, elle trie d’abord par date récente puis par prix croissant. Les jointures assemblent d’abord toutes les données et ORDER BY classe ensuite l’ensemble du résultat joint. Les dates récentes apparaissent en premier dans chaque tranche de prix.
SELECT c.nom, p.prix, com.date
FROM clients c
JOIN commandes com ON c.id = com.client_id
JOIN produits p ON com.produit_id = p.id
ORDER BY com.date DESC, p.prix ASC;
Sources : MySql , Postgresql