Résumé : dans ce tutoriel, vous apprendrez à trier un ensemble de résultats en utilisant la clause MySQL ORDER BY
.
Introduction à la clause MySQL ORDER BY
Lorsque vous utilisez l’instruction SELECT
pour interroger les données d’une table, l’ensemble de résultats n’est pas trié. Cela signifie que les lignes du jeu de résultats peuvent être dans n’importe quel ordre.
Pour trier le jeu de résultats, vous ajoutez la clause ORDER BY
à l’instruction SELECT
. Voici une illustration de la syntaxe de la clause ORDER BY
:
Dans cette syntaxe, vous spécifiez la ou les colonnes que vous souhaitez trier après la clause ORDER BY
.
La ASC
signifie ascendant et la DESC
signifie descendant. Vous utilisez ASC
pour trier l’ensemble des résultats par ordre croissant et DESC
pour trier l’ensemble des résultats par ordre décroissant.
Cette ORDER BY
clause trie l’ensemble des résultats par ordre croissant :
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
Et cette ORDER BY
clause trie l’ensemble des résultats par ordre décroissant :
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 DESC;
Par défaut, la clause ORDER BY
utilise ASC
si vous ne spécifiez explicitement aucune option.
Par conséquent, les clauses suivantes sont équivalentes :
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
et
Code language: SQL (Structured Query Language) (sql)ORDER BY column1;
Si vous voulez trier le jeu de résultats par plusieurs colonnes, vous spécifiez une liste de colonnes séparées par des virgules dans la clause ORDER BY
:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1, column2;
Il est possible de trier le résultat par une colonne en ordre croissant, puis par une autre colonne en ordre décroissant :
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC, column2 DESC;
Dans ce cas, la clause ORDER BY
:
- D’abord, trier le jeu de résultats par les valeurs de la
column1
dans l’ordre croissant. - Puis, triez l’ensemble de résultats triés par les valeurs de la
column2
dans l’ordre décroissant. Notez que l’ordre des valeurs dans lacolumn1
ne changera pas dans cette étape, seul l’ordre des valeurs dans lacolumn2
change.
Notez que la clause ORDER BY
est toujours évaluée après la clause FROM
et SELECT
.
MySQL ORDER BY exemples
Nous allons utiliser la table customers
de la base de données exemple pour la démonstration.
A) Utilisation de la clause ORDER BY de MySQL pour trier les valeurs dans une colonne exemple
.
La requête suivante utilise la clause ORDER BY
pour trier les clients selon les valeurs de la colonne contactLastName
dans l’ordre croissant.
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Essayez-le
Si vous voulez trier les clients par le nom de famille dans l’ordre décroissant, vous utilisez la DESC
après la colonne contactLastname
dans la clause ORDER BY
comme indiqué dans la requête suivante :
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Essayez-le
B) Utilisation de la clause ORDER BY de MySQL. pour trier des valeurs dans plusieurs colonnes exemple
Si vous voulez trier les clients par le nom de famille dans l’ordre décroissant puis par le prénom dans l’ordre croissant, vous spécifiez à la fois DESC
et ASC
dans la colonne correspondante comme suit :
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Essayez-le
Dans cet exemple, la clause ORDER BY
trie d’abord le jeu de résultats par le nom de famille dans l’ordre décroissant, puis trie le jeu de résultats trié par le prénom dans l’ordre croissant pour produire le jeu de résultats final.
C) Utilisation de MySQL ORDER BY pour trier un ensemble de résultats par une expression exemple
Voir la table suivante orderdetails
de la base de données exemple.
La requête suivante sélectionne les articles de ligne de commande dans la table orderdetails
. Elle calcule le sous-total pour chaque poste de ligne et trie le jeu de résultats en fonction du sous-total.
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Essayez-le
Pour rendre la requête plus lisible, vous pouvez attribuer à l’expression de la clause SELECT
un alias de colonne et utiliser cet alias de colonne dans la clause ORDER BY
comme le montre la requête suivante :
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Try It Out
Dans cet exemple, nous avons utilisé subtotal
comme alias de colonne pour l’expression quantityOrdered * priceEach
et trié le jeu de résultats par l’alias subtotal
.
L’alias de colonne peut être utilisé dans la clause ORDER BY
car la clause SELECT
est évaluée avant la clause ORDER BY
. Au moment où la clause ORDER BY
est évaluée, l’alias de la colonne est accessible.
Utilisation de MySQL ORDER BY pour trier les données à l’aide d’une liste personnalisée
La clause ORDER BY
permet de trier les données à l’aide d’une liste personnalisée en utilisant la fonction FIELD()
.
Voyez le tableau suivant orders
de la base de données exemple.
Supposons que vous souhaitiez trier les commandes client en fonction de leurs statuts dans l’ordre suivant :
- En cours de traitement
- En attente
- Annulé
- Résolu
- Discuté
- Envoyé
Pour ce faire, vous pouvez utiliser la fonction FIELD()
pour faire correspondre chaque statut de commande à un numéro et trier le résultat par le résultat de la fonction FIELD()
:
Essayez-le
L’expression suivante :
Code language: SQL (Structured Query Language) (sql)FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
renvoie l’indice du status
dans la liste 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped'
.
Par exemple, si le status
est In Process
, la fonction renverra 1. Si le status
est On Hold
, la fonction retournera 2, et ainsi de suite.
Dans ce tutoriel, vous avez appris à utiliser la clause MySQL ORDER BY
pour trier les lignes du jeu de résultats par une ou plusieurs colonnes dans un ordre croissant ou décroissant.
- Ce tutoriel vous a-t-il été utile ?
- OuiNon
.