SQL ORDER BY
La commande ORDER BY permet de trier les lignes dans un résultat d’une requête SQL. Il est possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant ou descendant.
Syntaxe
Une requête où l’ont souhaite filtrer l’ordre des résultats utilise la commande ORDER BY de la sorte :
SELECT colonne1, colonne2 FROM table ORDER BY colonne1
Par défaut les résultats sont classés par ordre ascendant, toutefois il est possible d’inverser l’ordre en utilisant le suffixe DESC après le nom de la colonne. Par ailleurs, il est possible de trier sur plusieurs colonnes en les séparant par une virgule. Une requête plus élaboré ressemblerais alors cela :
SELECT colonne1, colonne2, colonne3 FROM table ORDER BY colonne1 DESC, colonne2 ASC
A noter : il n’est pas obligé d’utiliser le suffixe « ASC » sachant que les résultats sont toujours classé par ordre ascendant par défaut. Toutefois, c’est plus pratique pour mieux s’y retrouver, surtout si on a oublié l’ordre par défaut.
Exemple
Pour l’ensemble de nos exemple, nous allons prendre un base « utilisateur » de test, qui contient les données suivantes :
id | nom | prenom | date_inscription | tarif_total |
---|---|---|---|---|
1 | Durand | Maurice | 2012-02-05 | 145 |
2 | Dupond | Fabrice | 2012-02-07 | 65 |
3 | Durand | Fabienne | 2012-02-13 | 90 |
4 | Dubois | Chloé | 2012-02-16 | 98 |
5 | Dubois | Simon | 2012-02-23 | 27 |
Pour récupérer la liste de ces utilisateurs par ordre alphabétique du nom de famille, il est possible d’utiliser la requête suivante :
SELECT * FROM utilisateur ORDER BY nom
Résultat :
id | nom | prenom | date_inscription | tarif_total |
---|---|---|---|---|
4 | Dubois | Chloé | 2012-02-16 | 98 |
5 | Dubois | Simon | 2012-02-23 | 27 |
2 | Dupond | Fabrice | 2012-02-07 | 65 |
1 | Durand | Maurice | 2012-02-05 | 145 |
3 | Durand | Fabienne | 2012-02-13 | 90 |
En utilisant deux méthodes de tri, il est possible de retourner les utilisateurs par ordre alphabétique ET pour ceux qui ont le même nom de famille, les trier par ordre décroissant d’inscription. La requête serait alors la suivante :
SELECT * FROM utilisateur ORDER BY nom, date_inscription DESC
Résultat :
id | nom | prenom | date_inscription | tarif_total |
---|---|---|---|---|
5 | Dubois | Simon | 2012-02-23 | 27 |
4 | Dubois | Chloé | 2012-02-16 | 98 |
2 | Dupond | Fabrice | 2012-02-07 | 65 |
3 | Durand | Fabienne | 2012-02-13 | 90 |
1 | Durand | Maurice | 2012-02-05 | 145 |