- Catégories :
ORDER BY¶
Spécifie un classement des lignes de la table de résultats à partir d’une liste SELECT.
Syntaxe¶
SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
- Où :
orderItem ::= { <column_alias> | <position> | <expr> } [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
column_alias
Alias de colonne figurant dans la liste SELECT du bloc de requête.
position
Position d’une expression dans la liste SELECT.
expr
Toute expression sur les tables du périmètre actuel.
ASC | DESC
Renvoie éventuellement les valeurs de la clé de tri par ordre croissant (du plus petit au plus grand) ou décroissant (du plus grand au plus petit).
Par défaut :
ASC
NULLS FIRST | LAST
Spécifie éventuellement les valeurs NULL renvoyées avant / après les valeurs non NULL, en fonction de l’ordre de tri (
ASC
ouDESC
).Par défaut : dépend de l’ordre de tri (
ASC
ouDESC
) ; voir les notes sur l’utilisation ci-dessous pour plus de détails
Notes sur l’utilisation¶
Toutes les données sont triées en fonction de la valeur d’octet numérique de chaque caractère de la table ASCII. Le codage UTF-8 est pris en charge.
Pour les valeurs numériques, les zéros de tête avant la virgule décimale et les zéros de fin (
0
) après la virgule décimale n’ont aucun effet sur l’ordre de tri.Sauf indication contraire, les valeurs NULL sont considérées comme supérieures à toutes les valeurs autres queNULL. En conséquence, l’ordre pour NULLS dépend de l’ordre de tri :
Si l’ordre de tri est
ASC
, NULLS est renvoyé en dernier ; pour forcer NULLS à être le premier, utilisezNULLS FIRST
.Si l’ordre de tri est
DESC
, NULLS est renvoyé en premier ; pour forcer NULLS à être le dernier, utilisezNULLS LAST
.
Un ORDER BY peut être utilisé à différents niveaux dans une requête, par exemple dans une sous-requête ou dans une sous-clause OVER(). Un ORDER BY à l’intérieur d’une sous-requête ou d’une sous-clause s’applique uniquement dans cette sous-requête ou sous-clause. Par exemple, le ORDER BY dans la requête suivante demande uniquement des résultats dans la sous-requête et non dans le niveau externe de la requête :
select * from ( select branch_name from branch_offices ORDER BY monthly_sales DESC limit 3 ) ;
Dans cet exemple, ORDER BY est spécifié dans la sous-requête, donc la sous-requête renvoie les noms dans l’ordre des ventes mensuelles. Le ORDER BY dans la sous-requête ne s’applique pas à la requête externe. Cette requête renvoie les noms des trois succursales qui ont enregistré les ventes mensuelles les plus élevées, mais pas nécessairement dans l’ordre des ventes mensuelles.
Le tri peut être coûteux. Si vous voulez que les résultats de la requête externe soient triés, utilisez une clause
ORDER BY
uniquement au niveau supérieur de la requête, et évitez d’utiliser les clausesORDER BY
dans les sous-requêtes, sauf si nécessaire.
Exemples¶
Exemple d’ordre de tri pour les chaînes :
SELECT column1 FROM VALUES ('a'), ('1'), ('B'), (null), ('2'), ('01'), ('05'), (' this'), ('this'), ('this and that'), ('&'), ('%') ORDER BY column1; +---------------+ | COLUMN1 | |---------------| | this | | % | | & | | 01 | | 05 | | 1 | | 2 | | B | | a | | this | | this and that | | NULL | +---------------+
Exemple d’ordre de tri pour les nombres :
SELECT column1 FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 0.05 | | 0.50 | | 0.50 | | 1.00 | | 2.00 | | 3.00 | | 4.00 | | 5.00 | | 5.00 | | 6.00 | | NULL | +---------+
Exemple d’ordre de tri pour les valeurs NULL :
SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 1 | | 2 | | 3 | | NULL | | NULL | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 NULLS FIRST; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 1 | | 2 | | 3 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 3 | | 2 | | 1 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC NULLS LAST; +---------+ | COLUMN1 | |---------| | 3 | | 2 | | 1 | | NULL | | NULL | +---------+