7.5. Tri de lignes

Après qu'une table de sortie ait été produite par une requête (après que la liste de sélection ait été traitée), elle peut être optionnellement triée. Dans le cas contraire, les lignes sont renvoyées dans un ordre aléatoire. L'ordre réel, dans ce cas, dépendra des types de plan de parcours et de jointure et de l'ordre des données sur le disque, mais on ne peut s'y fier. Seul le tri explicite permet de garantir un ordre particulier en sortie.

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. font référence aux colonnes de la liste de sélection. Il peut s'agir du nom de sortie d'une colonne (voir Section 7.3.2) ou du numéro d'une colonne. 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;

En extension au standard SQL, PostgreSQL autorise aussi le tri par des expressions arbitraires :

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

Sont également autorisées les références aux noms de colonnes de la clause FROM qui sont renommées dans la liste de sélection :

SELECT a AS b FROM table1 ORDER BY a;

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

Chaque spécification de colonne peut être suivie d'un drapeau optionnel ASC ou DESC permettant de préciser 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. << Plus petit >> est défini conformément à l'opérateur <. De façon similaire, l'ordre descendant est déterminé avec l'opérateur >. [1]

Si plusieurs colonnes de tri sont spécifiées, les dernières entrées seront utilisées pour trier les lignes qui seraient égales selon l'ordre imposé par les premières colonnes de tri.

Notes

[1]

En fait, PostgreSQL utilise la classe d'opérateur par défaut, B-tree pour le type de données de la colonne. Cette classe permet de déterminer l'ordre de tri utilisé par ASC et DESC. Par convention, les types de données sont initialisés pour que les opérateurs < et > correspondent à cet ordre de tri. Il est cependant possible qu'un concepteur de types de données utilisateur choisisse de procéder différement.