Retour à la liste des articles Articles
6 minutes de lecture

Que fait ORDER BY ?

Lors de l'analyse de données, il est souvent utile d'ordonner les lignes d'une manière spécifique. Dans cet article, je vais utiliser plusieurs exemples pour montrer comment SQL ORDER BY trie les données selon une ou plusieurs colonnes dans l'ordre croissant ou décroissant.

Introduction à ORDER BY

Par défaut, l'ordre des lignes dans le résultat d'une requête SQL est arbitraire. Si vous souhaitez trier les résultats dans un ordre particulier, vous devez utiliser le mot-clé ORDER BY. Les lignes sont triées selon une ou plusieurs colonnes spécifiées dans la clause ORDER BY. Sauf indication contraire, ORDER BY trie les données par ordre croissant.

Prenons un exemple pour comprendre la syntaxe de ORDER BY. Nous disposons de la table suivante, qui contient des informations de base sur plusieurs films célèbres.

films
id titre realisateur annee_production
1 Psychose Alfred Hitchcock 1960
2 Minuit à Paris Woody Allen 2011
3 Accords et Désaccords Woody Allen 1993
4 Parle avec elle Pedro Almodóvar 2002
5 La piel que habito Pedro Almodóvar 2011

Notre première tâche consiste à trier ces lignes par année de production, en commençant par le film le plus ancien. Pour les données numériques, l'ordre croissant implique un tri du plus petit nombre au plus grand, et l'ordre décroissant implique un tri du plus grand nombre au plus petit. Comme nous voulons que le film le plus ancien apparaisse en premier, nous devons trier les résultats par ordre croissant. C'est l'ordre par défaut lorsque vous utilisez ORDER BY, mais vous pouvez également spécifier l'ordre en utilisant le mot-clé ASC.

Comment fonctionne ORDE BY en SQL ?

Voici comment SQL ORDER BY trie la table film par année de production, dans l'ordre croissant :

Pour trier la sortie avec ORDER BY, il suffit de :

  • Placer le mot-clé ORDER BY à la fin de la requête.
  • Le faire suivre du nom de la colonne que vous souhaitez utiliser pour le tri.
  • Spécifier le mot-clé ASC ou DESC pour l'ordre croissant ou décroissant, respectivement. Cette option est facultative.

Dans l'exemple ci-dessus, nous avons trié les résultats selon l'année de production, en commençant par le film le plus ancien. Pouvez-vous maintenant écrire une requête SQL pour ordonner le résultat selon l'année de production, mais en commençant par le film le plus récent ?

Je vous montrerai la réponse plus loin, mais vous pouvez d'ores et déjà vous tester et écrire une requête SQL pour obtenir le résultat suivant :

idtitrerealisateurannee_production
2Minuit à ParisWoody Allen2011
5La piel que habitoPedro Almodovar2011
4Parle avec ellePedro Almodovar2002
3Accords et DésaccordsWoody Allen1993
1PsychoseAlfred Hitchcock1960

Et voici la requête :

SELECT *
FROM films
ORDER BY annee_production DESC;

Nous avons simplement remplacé le mot-clé ASC par le mot-clé DESC afin de modifier l'ordre, de croissant à décroissant. C'est assez simple, n'est-ce pas ?

Pour obtenir une expérience pratique avec ORDER BY, consultez notre cours interactif SQL pour les débutants.

Voyons maintenant d'autres exemples d'utilisation de ORDER BY dans différents scénarios.

ORDER BY avec des données textuelles

Ordonnons la table films par titre de film dans l'ordre alphabétique inverse. Avec des données textuelles, l'ordre croissant implique un tri par ordre alphabétique (A-Z) et l'ordre décroissant implique un tri par ordre alphabétique inverse (Z-A). Notre requête SQL sera donc la suivante :

SELECT *
FROM films
ORDER BY titre DESC;
idtitrerealisateurannee_production
2Minuit à ParisWoody Allen2011
5La piel que habitoPedro Almodovar2011
4Parle avec ellePedro Almodovar2002
3Accords et DésaccordsWoody Allen1993
1PsychoseAlfred Hitchcock1960

Nous n'avons pas de valeurs NULL dans notre exemple, mais vous pouvez apprendre comment ORDER BY fonctionne avec les NULL dans cet article.

ORDER BY sur plusieurs colonnes

Vous pouvez souvent avoir besoin de trier les résultats d'une requête selon plusieurs colonnes. C'est le cas lorsque la première colonne contient plusieurs lignes avec les mêmes valeurs. Voyons comment cela fonctionne.

Dans l'exemple suivant, nous voulons classer les films (1) par le nom du réalisateur (dans l'ordre alphabétique) et (2) par l'année de production (en commençant par le film le plus récent). Compte tenu de la façon dont ORDER BY fonctionne avec les données numériques et textuelles, nous trierons l'ensemble des résultats par la colonne realisateur dans l'ordre croissant, puis par annee_production dans l'ordre décroissant :

SELECT *
FROM films
ORDER BY realisateur ASC, annee_production DESC;
idtitrerealisateurannee_production
1PsychoseAlfred Hitchcock1960
5La piel que habitoPedro Almodovar2011
4Parle avec ellePedro Almodovar2002
2Minuit à ParisWoody Allen2011
3Accords et DésaccordsWoody Allen1993

Comme prévu, l'ensemble des résultats commence par un film d'Alfred Hitchcock, dont le nom vient en premier dans l'ordre alphabétique. Ensuite, nous avons deux films de Pedro Almodóvar, dont le nom vient en deuxième position dans l'ordre alphabétique. Les films de Pedro Almodóvar sont ensuite triés par année de production, le film de 2011 venant en premier et celui de 2002 en second. La table se termine par les films de Woody Allen, également classés du plus récent au plus ancien. C'est l'ordre que nous recherchions.

ORDER BY dans les requêtes SQL complexes

Lorsque vous avez une requête SQL avec plusieurs clauses qui joignent, regroupent et filtrent des données, il est important de placer la clause ORDER BY à la toute fin de la requête.

Par exemple, supposons que nous voulions obtenir les noms des réalisateurs de films ayant réalisé plus d'un film et que nous voulions les classer par ordre alphabétique. Voici la requête à utiliser :

SELECT realisateur, count(titre) AS nombre_de_films
FROM films
GROUP BY realisateur
HAVING count(titre) > 1
ORDER BY realisateur;

Dans cette requête, nous regroupons d'abord les données, puis nous filtrons les groupes en fonction de notre condition ( > 1 film), et enfin nous trions l'ensemble des résultats selon la colonne realisateur (par ordre croissant, par défaut).

Voici le résultat que nous recherchions :

realisateurnombre_de_films
Pedro Almodovar2
Woody Allen2

Pour conclure sur SQL ORDER BY

Les règles suivantes résument les concepts clés de l'utilisation de ORDER BY:

  • ORDER BY est toujours placé à la fin de la requête. Les clauses telles que FROM, WHERE, GROUP BY, HAVING, etc. doivent être placées avant le mot-clé ORDER BY.
  • Pour trier les résultats par ordre croissant, vous pouvez placer le mot-clé ASC après le nom de la colonne. Toutefois, cela est facultatif, car le tri est effectué par défaut dans l'ordre croissant.
  • Pour trier les résultats dans l'ordre décroissant, placez le mot-clé DESC après le nom de la colonne.
  • Pour trier les résultats sur plusieurs colonnes, il suffit de spécifier le nom des colonnes dans la clause ORDER BY. L'ensemble des résultats sera trié selon la première colonne ; s'il y a plusieurs lignes avec la même valeur dans la première colonne, les lignes seront triées selon la deuxième colonne, etc.
  • Lorsque vous effectuez un tri sur plusieurs colonnes, vous pouvez placer les mots-clés ASC et DESC après chaque nom de colonne. En d'autres termes, vous pouvez trier certaines colonnes par ordre croissant et d'autres par ordre décroissant dans la même requête.

Il s'agit là des règles de base pour l'utilisation de la clause ORDER BY. Pour en connaitre plus sur des utilisations plus avancées, comme l'insertion d'expressions dans ORDER BY, consultez ce guide complet.

Il est temps de pratiquer SQL ORDER BY !

Vous avez appris comment fonctionne SQL ORDER BY; il est maintenant temps de mettre en pratique vos nouvelles connaissances. Je vous recommande de commencer par le cours LearnSQL.fr SQL pour les débutants qui couvre tous les concepts SQL fondamentaux et comprend un certain nombre d'exercices interactifs sur le tri des lignes avec ORDER BY.

Pour plus d'exercices, consultez notre cours Exercices Pratiques de SQL. Ce cours teste les connaissances de base en SQL à l'aide de plusieurs exercices sur l'agrégation de données, le regroupement, le filtrage et, bien sûr, le tri.

Apprendre SQL ne devrait pas être difficile. Apprenez en vous amusant !