Retour à la liste des articles Articles
7 minutes de lecture

Comment trier des enregistrements avec la clause ORDER BY ?

Les bases de données relationnelles ne stockent pas les enregistrements par ordre alphabétique, numérique, ascendant ou autre. La seule façon d'ordonner les enregistrements dans le jeu de résultats est d'utiliser la clause ORDER BY. Vous pouvez utiliser cette clause pour classer les lignes par une colonne, une liste de colonnes ou une expression. Vous pouvez également ordonner les enregistrements en utilisant l'expression CASE.

Dans cet article, nous allons examiner la clause ORDER BY - comment l'écrire, comment elle fonctionne et ce qu'elle fait.

Syntaxe ORDER BY

La clause ORDER BY est utilisée pour trier les lignes d'un tableau de résultats. Voici sa syntaxe :

SELECT list_column
FROM table
ORDER BY column ;

Utilisation de ORDER BY avec une colonne

L'exemple ci-dessous montre des enregistrements dans la table furniture_data qui ont été triés par ordre croissant en fonction de la colonne furniture. L'ordre ascendant est l'ordre de tri par défaut dans une clause ORDER BY.

SELECT id, furniture, points
FROM furniture_data
ORDER BY furniture ;

Comme vous pouvez le constater, la clause ORDER BY est placée après l'instruction FROM. Après le mot-clé ORDER BY, nous avons la ou les colonnes par lesquelles les lignes seront triées. En d'autres termes, vous indiquez à la base de données "Prenez les colonnes id, furniture, et points de la table furniture_data et mettez-les dans l'ordre en vous basant sur la colonne des meubles".

Vous pouvez spécifier la manière dont les résultats sont triés, soit par ordre croissant (A-Z), soit par ordre décroissant (Z-A). Pour l'ordre ascendant, vous pouvez utiliser le mot-clé ASC, mais ce n'est pas nécessaire. Pour l'ordre décroissant, vous devez utiliser le mot-clé DESC.

Ainsi, après le nom de la colonne, vous pouvez mettre le mot-clé ASC ou DESC. L'exemple ci-dessous trie les données dans l'ordre croissant par la colonne "furniture" :

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture ASC ;

N'oubliez pas que vous n'avez pas besoin du mot-clé ASC pour spécifier un tri ascendant ; SQL le fait par défaut.

Ensuite, regardez les données de la table furniture_data que nous utiliserons dans les autres exemples de cet article :

id furniture points price
1 chair 5 120
2 sofa 8 950
3 table 2 1350
4 bookcase 5 200
5 bed 3 2000

Voici à quoi cela ressemble après un tri ascendant sur la colonne furniture:

id furniture points
5 bed 3
4 bookcase 5
1 chair 5
2 sofa 8
3 table 2

Et si on faisait un tri descendant sur la même colonne ?

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture DESC ;

Voici le résultat pour le tri descendant:

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Utilisation de ORDER BY avec plusieurs colonnes

Les derniers exemples ont trié les données en utilisant une seule colonne. Cependant, si certains enregistrements de cette colonne ont des valeurs identiques, cela peut affecter l'affichage des résultats. Dans ce cas, nous devons ordonner les lignes à l'aide d'une colonne supplémentaire. L'exemple suivant montre comment utiliser plus d'une colonne pour ordonner les données :

SELECT id, furniture, points
FROM furniture _data
ORDER BY point DESC , furniture;

Cet exemple trie les lignes par ordre décroissant en fonction de la colonne points. Si deux enregistrements ou plus ont la même valeur, la base de données utilise la colonne furniture pour trier ces enregistrements par ordre croissant.

Voici les résultats :

id furniture points
2 sofa 8
4 bookcase 5
1 chair 5
5 bed 3
3 table 2

Les rangées bibliothèque et chaise ont le même nombre de points (5), ces rangées sont donc également triées en fonction des valeurs de la colonne furniture. Le tri est alphabétique, de sorte que la ligne bibliothèque est affiché avant la rangée chaise ligne .

Expressions dans la clause ORDER BY

Parfois, nous devons trier les enregistrements en fonction du résultat d'un calcul plutôt que des valeurs des colonnes. Imaginez que vous souhaitiez trier les données extraites de la table furniture_data en fonction du montant d'une remise de prix. Vous calculeriez la remise en multipliant la valeur de la colonne points par 120, puis en la divisant par 100.

Voici à quoi cela ressemblerait en code SQL :

SELECT id, furniture, points, price
FROM furniture _data
ORDER BY price-120*points/100;

Voici le résultat :

id furniture points price
1 chair 5 120
4 bookcase 5 200
2 sofa 8 950
3 table 2 1350
5 bed 3 2000

Utilisation de ORDER BY avec CASE

Classement par l'expression CASE

Outre le tri des lignes à l'aide d'une ou plusieurs colonnes, vous pouvez également utiliser ORDER BY avec des expressions CASE simples et recherchées.(Pour en savoir plus sur CASE, lisez cet article.) Pourquoi utiliser CASE dans une clause ORDER BY? Il se peut que vous souhaitiez être encore plus précis sur la façon dont les lignes sont triées, ou que vous souhaitiez récupérer uniquement certaines lignes (c'est-à-dire celles qui répondent à certaines conditions).

L'exemple ci-dessous montre comment utiliser CASE pour trier les données d'une manière spécifique. Imaginez que vous voulez extraire des données de la table furniture_data mais que vous souhaitez que les lignes comportant un nombre pair de points soient affichées en haut des résultats. Vous ne pouvez pas le faire en utilisant les colonnes comme critères de tri ; vous avez besoin de CASE.

Vous trouverez ci-dessous un exemple du code correspondant :

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END ;

Voici à quoi ressemblent les résultats :

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

Comment l'expression CASE s'y prend-elle ? Elle vérifie si le nombre figurant dans la colonne points peut être divisé par 2 sans reste. Si c'est le cas, un 1 est renvoyé et la ligne est affichée dans la partie supérieure des résultats. Dans le cas contraire, un 2 est renvoyé et la ligne est affichée dans la partie inférieure des résultats.

Si vous voulez que les fiches de meubles ayant un nombre impair de points soient listées en premier, il suffit de changer l'ordre de tri en décroissant :

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END   DESC ;

Le résultat :

id furniture points
1 chair 5
4 bookcase 5
5 bed 3
2 sofa 8
3 table 2

Classer avec CASE et une colonne

Vous pouvez utiliser d'autres éléments avec l'instruction CASE, comme une colonne ou même une autre expression CASE. Regardez l'exemple suivant, qui utilise une expression CASE et une colonne pour ordonner les données.

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END , furniture  DESC ;

Tout d'abord, les enregistrements sont classés en fonction de l'expression CASE, qui vérifie si les valeurs points sont paires ou impaires. Comme précédemment, les nombres pairs sont classés en premier. Mais nous voulons trier encore plus les groupes. Nous utilisons donc la colonne furniture pour classer les résultats dans le groupe CASE. Comme nous avons utilisé le mot clé DESC, les lignes sont classées dans l'ordre alphabétique inverse. Voici les résultats :

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Comparez ces résultats avec ceux ci-dessous, qui utilisent uniquement l'expression CASE:

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

Vous voulez en savoir plus ?

Cet article ne fait que vous permettre de commencer à utiliser la clause ORDER BY. La meilleure façon d'en savoir plus est de l'essayer par vous-même, en utilisant le cours de requêtes SQL de la Vertabelo Academy.