7.5. Tri des 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é. 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 expression_tri1 [ASC | DESC][, expression_tri2 [ASC | DESC] ...]
Les expressions de tri peuvent être toute expression qui serait
valide dans la liste de sélection des requêtes. Voici un exemple
SELECT a, b FROM table1 ORDER BY a + b, c;
Quand plus d'une expression est indiquée, les valeurs suivantes sont
utilisées pour trier les lignes qui sont identiques aux valeurs
précédentes. Chaque expression 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 >. []
Pour une compatibilité ascendante avec la version SQL92 du standard,
une
expression_tri
peut être à
la place le nom ou le numéro d'une colonne en sortie, par exemple
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;
les deux triant par la première colonne en sortie. Notez qu'un nom de
colonne en sortie doit être unique, il ne doit pas faire partie d'une
expression -- par exemple, ceci n'est
pas
correct :
SELECT a + b AS sum, c FROM table1 ORDER BY sum + c; -- mauvais
Cette restriction est là pour réduire l'ambiguïté. Il y en a toujours
si un élément ORDER BY est un simple nom qui
pourrait correspondre soit à un nom de colonne en sortie soit à une
colonne d'une expression de table. La colonne en sortie est utilisée
dans de tels cas. Cela causera seulement de la confusion si vous
utilisez AS pour renommer une colonne en
sortie qui correspondra à un autre nom de colonne d'une table.
ORDER BY peut être appliqué au résultat
d'une combinaison UNION, d'une
combinaisonINTERSECT ou d'une combinaison
EXCEPT mais, dans ce cas, il est seulement
permis de trier par les noms ou numéros de colonnes, pas par les
expressions.