Une fois qu’une requête a produit une table de sortie (une fois la liste de sélection traitée), elle peut éventuellement être triée. Si le tri n’est pas choisi, les lignes seront renvoyées dans un ordre non spécifié. L’ordre réel dans ce cas dépendra des types de plan d’analyse et de jointure et de l’ordre sur le disque, mais il ne faut pas s’y fier. Un ordre de sortie particulier ne peut être garanti que si l’étape de tri est explicitement choisie.
La clause ORDER BY spécifie l’ordre de tri:
SELECT select_list FROM table_expression ORDER BY column1 ...]
colonne 1, etc., reportez-vous à sélectionner les colonnes de la liste. 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 tant qu’extension du standard SQL, PostgreSQL permet également de classer par expressions arbitraires:
SELECT a, b FROM table1 ORDER BY a + b;
Les références aux noms de colonnes de la clause FROM qui ne sont pas présentes dans la liste select sont également 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 vers d’autres bases de données SQL.
Chaque spécification de colonne peut être suivie d’un ASC ou d’un DESC optionnel pour définir le sens de tri sur croissant ou décroissant. L’ordre ASC est la valeur par défaut. L’ordre croissant place les valeurs plus petites en premier, où « plus petit » est défini en termes de l’opérateur <. De même, l’ordre décroissant est déterminé avec l’opérateur >.
Si plusieurs colonnes de tri sont spécifiées, les entrées ultérieures sont utilisées pour trier les lignes égales dans l’ordre imposé par les colonnes de tri antérieures.