PostgreSQL ORDER BY
Résumé : dans ce tutoriel, vous apprendrez à trier le jeu de résultats renvoyé par l’énoncé SELECT
en utilisant la clause ORDER BY de PostgreSQL.
Introduction à la clause ORDER BY de PostgreSQL
Lorsque vous interrogez les données d’une table, l’instruction SELECT
renvoie les lignes dans un ordre non spécifié. Pour trier les lignes du jeu de résultats, vous utilisez la clause ORDER BY
de l’instruction SELECT
.
La clause ORDER BY
vous permet de trier les lignes renvoyées par une clause SELECT
dans un ordre croissant ou décroissant en fonction d’une expression de tri.
Les éléments suivants illustrent la syntaxe de la clause ORDER BY
:
Code language: SQL (Structured Query Language) (sql)SELECTselect_listFROMtable_nameORDER BYsort_expression1 , ...sort_expressionN ;
Dans cette syntaxe :
- D’abord, spécifiez une expression de tri, qui peut être une colonne ou une expression, que vous voulez trier après les mots-clés
ORDER BY
. Si vous voulez trier le jeu de résultats en fonction de plusieurs colonnes ou expressions, vous devez placer une virgule (,
) entre deux colonnes ou expressions pour les séparer. - Deuxièmement, vous utilisez l’option
ASC
pour trier les lignes dans l’ordre croissant et l’optionDESC
pour trier les lignes dans l’ordre décroissant. Si vous omettez l’optionASC
ouDESC
, laORDER BY
utiliseASC
par défaut.
PostgreSQL évalue les clauses du statut SELECT
dans l’ordre suivant : FROM
SELECT
, et ORDER BY
:

En raison de l’ordre d’évaluation, si vous avez un alias de colonne dans la clause SELECT
, vous pouvez l’utiliser dans la clause ORDER BY
.
Permettons de prendre quelques exemples d’utilisation de la clause PostgreSQL ORDER BY
.
Exemples de ORDER BY PostgreSQL
Nous utiliserons la table customer
de la base de données exemple pour la démonstration.

1) Utilisation de la clause ORDER BY de PostgreSQL pour trier les rangs par une colonne
La requête suivante utilise la clause ORDER BY
pour trier les clients par leur prénom dans l’ordre croissant :
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name ASC;

Puisque l’option ASC
est la valeur par défaut, vous pouvez l’omettre dans la clause ORDER BY
comme ceci :
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name;
2) Utiliser la clause ORDER BY de PostgreSQL pour trier les lignes par une colonne dans l’ordre décroissant
L’instruction suivante sélectionne le prénom et le nom dans la table customer
et trie les lignes par les valeurs de la colonne du nom dans l’ordre décroissant :
Code language: SQL (Structured Query Language) (sql)SELECT first_name, last_nameFROM customerORDER BY last_name DESC;

3) Utilisation de la clause ORDER BY de PostgreSQL pour trier des lignes par plusieurs colonnes
L’instruction suivante sélectionne le prénom et le nom de famille dans la table client et trie les lignes par le prénom dans l’ordre croissant et le nom de famille dans l’ordre décroissant :
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerORDER BYfirst_name ASC,last_name DESC;

Dans cet exemple, la clause ORDER BY trie d’abord les lignes par les valeurs de la colonne prénom. Et ensuite, elle trie les lignes triées par les valeurs de la colonne du dernier nom.
Comme vous pouvez le voir clairement dans la sortie, deux clients ayant le même prénom Kelly
ont le dernier nom trié par ordre décroissant.
4) Utilisation de la clause ORDER BY de PostgreSQL pour trier les lignes par des expressions
La fonction LENGTH()
accepte une chaîne et renvoie la longueur de cette chaîne.
L’instruction suivante sélectionne les prénoms et leurs longueurs. Elle trie les lignes en fonction des longueurs des prénoms :
Code language: SQL (Structured Query Language) (sql)SELECT first_name,LENGTH(first_name) lenFROMcustomerORDER BY len DESC;

Parce que la clause ORDER BY
est évaluée après la clause SELECT
, l’alias de colonne len
est disponible et peut être utilisé dans la clause ORDER BY
.
La clause ORDER BY de PostgreSQL et NULL
Dans le monde des bases de données, NULL
est un marqueur qui indique les données manquantes ou les données inconnues au moment de l’enregistrement.
Lorsque vous triez des lignes qui contiennent NULL
, vous pouvez préciser l’ordre de NULL
avec d’autres valeurs non nulles en utilisant l’option NULLS FIRST
ou NULLS LAST
de la clause ORDER BY
:
Code language: CSS (css)ORDER BY sort_expresssion
L’option NULLS FIRST
place NULL
avant les autres valeurs nonnull et l’option NULL LAST
place NULL
après d’autres valeurs non nulles.
Créons un tableau pour la démonstration.
Code language: SQL (Structured Query Language) (sql)-- create a new tableCREATE TABLE sort_demo(num INT);-- insert some dataINSERT INTO sort_demo(num)VALUES(1),(2),(3),(null);
Notez que vous n’avez pas besoin de comprendre les instructions CREATE TABLE
et INSERT
. Il suffit de l’exécuter depuis pgAdmin
ou psql
pour créer la table sort_demo
et y insérer des données.
La requête suivante renvoie les données de la table sort_demo
:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num;

Dans cet exemple, la clause ORDER BY
trie les valeurs de la colonne num
de la table sort_demo
par ordre croissant. Elle place NULL
après les autres valeurs.
Si vous utilisez l’option ASC
, la clause ORDER BY
utilise l’option NULLS LAST
par défaut. Par conséquent, la requête suivante renvoie le même résultat :
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num NULLS LAST;
Pour placer NULL
avant d’autres valeurs non nulles, vous utilisez l’option NULLS FIRST
:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num NULLS FIRST;

L’instruction suivante instruction trie les valeurs de la colonne num
du tableau sort_demo
par ordre décroissant :
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num DESC;

Comme vous pouvez le voir clairement dans la sortie, la clause ORDER BY
avec l’option DESC
utilise la NULLS FIRST
par défaut.
Pour inverser l’ordre, vous pouvez utiliser l’option NULLS LAST
:
Code language: SQL (Structured Query Language) (sql)SELECT numFROM sort_demoORDER BY num DESC NULLS LAST;

Summary
- Utiliser la clause
ORDER BY
dans l’instructionSELECT
pour trier les lignes. - Utiliser l’option
ASC
pour trier les rangs par ordre croissant et l’optionDESC
pour trier les rangs par ordre décroissant. La clauseORDER BY
utilise l’optionASC
par défaut. - Utiliser les options
NULLS FIRST
etNULLS LAST
pour spécifier explicitement l’ordre deNULL
avec d’autres valeurs non nulles.
- Ce tutoriel a-t-il été utile ?
- OuiNon
.