7.5. Tri de lignes

Après qu'une requête ait produit une table en sortie (après que la liste de sélection ait été traitée), elle peut être optionnellement triée. Si le tri n'a pas été choisi, les lignes sont renvoyées dans un ordre non spécifié. L'ordre réel dans ce cas dépendra des types de plan de parcours et de jointure et de l'ordre sur le disque mais vous ne devez pas vous y fier. Un tri particulier en sortie peut seulement être garantie si l'étape de tri est choisie explicitement.

La clause ORDER BY spécifie l'ordre de tri :

SELECT liste_selection
    FROM expression_table
    ORDER BY colonne1 [ASC | DESC]
[, colonne2 [ASC | DESC]
...]

colonne1, etc. réfèrent les colonnes de la liste de sélection. Ceci peut soit être le nom de sortie d'une colonne (voir Section 7.3.2) ou le numéro d'une colonne. Voici quelques exemples :

SELECT a, b FROM table1 ORDER BY a;
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, sum(b) FROM table1 GROUP BY a ORDER BY 1;

Comme une extension du standard SQL, PostgreSQL autorise aussi l'ordre des expressions arbitraires :

SELECT a, b FROM table1 ORDER BY a + b;

Les références des noms de colonnes dans la clause FROM, absentes de la liste de sélection, sont aussi autorisées :

SELECT a FROM table1 ORDER BY b;

Mais ces extensions ne fonctionnent pas dans les requêtes impliquant UNION, INTERSECT ou EXCEPT et ne sont pas portables dans les autres bases de données SQL.

Chaque spécification de colonne pourrait être suivie d'un ASC ou DESC optionnelle pour initialiser la direction du tri (ascendant ou descendant). L'ordre ASC est la valeur par défaut. L'ordre ascendant place les plus petites valeurs en premier où << plus petit >> est défini en terme de l'opérateur <. De façon similaire, l'ordre descendant est déterminé avec l'opérateur >. [1]

Si plus d'une colonne de tri est spécifiée, les entrées suivantes sont utilisées pour trier les lignes qui sont égales sous l'ordre imposé par les colonnes de tri précédent.

Notes

[1]

En fait, PostgreSQL utilise la classe d'opérateur B-tree par défaut pour le type de données de la colonne pour déterminer l'ordre de tri avec ASC et DESC. De façon conventionnelle, les types de données seront initialisés de façon à ce que les opérateurs < et > correspondent à cet ordre de tri mais un concepteur des types de données définis par l'utilisateur pourrait choisir de faire quelque chose de différent.