Documentation PostgreSQL 8.1.23 > Langage SQL > Requêtes > Tri des lignes | |
Combiner des requêtes | LIMIT et OFFSET |
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é. Dans ce cas, l'ordre réel 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. font référence les colonnes de la liste de sélection. Ceci peut soit être le nom de sortie d'une colonne (voir la Section 7.3.2, « Labels de colonnes ») soit 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;
En extension du standard SQL, PostgreSQL™ autorise aussi d'ordonner suivant 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 optionnel pour configurer 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 avec l'opérateur <. De façon similaire, l'ordre descendant est déterminé avec l'opérateur >. [4]
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.
[4] 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.