Clause ORDER BY (Transact-SQL)

Spécifie l'ordre de tri utilisé sur des colonnes renvoyées dans une instruction SELECT. La clause ORDER BY n'est pas valide dans les vues, les fonctions Inline, les tables dérivées et les sous-requêtes, sauf si TOP est également spécifié.

[!REMARQUE]

Lorsque la clause ORDER BY est utilisée dans la définition d'une vue, d'une fonction incluse, d'une table dérivée ou d'une sous-requête, elle permet uniquement de déterminer les lignes retournées par la clause TOP. La clause ORDER BY ne garantit pas des résultats classés lorsque ces constructions sont interrogées, sauf si ORDER BY est également spécifié dans la requête proprement dite.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

[ ORDER BY 
    {
    order_by_expression 
  [ COLLATE collation_name ] 
  [ ASC | DESC ] 
    } [ ,...n ] 
] 

Arguments

  • order_by_expression
    Indique une colonne dans laquelle effectuer un tri. Une colonne de tri peut être définie comme un nom ou alias de colonne ou un nombre entier non négatif représentant la position du nom ou de l'alias dans la liste de sélection. Il n'est pas possible de spécifier un nombre entier lorsque l'argument order_by_expression apparaît dans une fonction de classement. Une colonne de tri peut inclure une expression ; cependant, lorsque la base de données s'exécute en mode de compatibilité SQL Server (90), le résultat de l'expression ne peut pas être une constante. Les noms ou alias de colonne peuvent être qualifiés par le nom de la table ou de la vue. Dans SQL Server, les noms et les alias de colonne qualifiés sont résolus en colonnes répertoriées dans la clause FROM. Si order_by_expression n'est pas qualifié, la valeur doit être unique parmi toutes les colonnes répertoriées dans l'instruction SELECT.

    Il est possible de définir plusieurs colonnes de tri. La séquence des colonnes de tri de la clause ORDER BY définit la structure de l'ensemble de résultats trié.

    La clause ORDER BY peut comporter des éléments qui n'apparaissent pas dans la liste de sélection. Toutefois, si SELECT DISTINCT est spécifié, si l'instruction contient une clause GROUP BY ou si l'instruction SELECT contient un opérateur UNION, les colonnes de tri doivent apparaître dans la liste de sélection.

    De plus, lorsqu'une instruction SELECT comprend un opérateur UNION, les noms ou alias de colonne doivent correspondre à ceux spécifiés dans la première liste de sélection.

    [!REMARQUE]

    Les colonnes ntext, text, image ou xmlne peuvent pas être utilisées dans une clause ORDER BY.

  • COLLATE {collation_name}
    Spécifie que l'opération ORDER BY doit être exécutée conformément au classement spécifié dans collation_name, et non pas conformément au classement de la colonne tel que défini dans la table ou la vue. collation_name peut être soit un nom de classement Windows, soit un nom de classement SQL. Pour plus d'informations, consultez Paramètres de classement du programme d'installation et Utilisation des classements SQL Server. COLLATE est applicable seulement pour les colonnes dont le type de données est char, varchar, nchar et nvarchar.

  • ASC
    Indique que les valeurs de la colonne spécifiée doivent être triées par ordre croissant, de la valeur la plus petite à la plus grande. ASC est l'ordre de tri par défaut.

  • DESC
    Indique que les valeurs de la colonne spécifiée doivent être triées par ordre décroissant, de la valeur la plus grande à la plus petite.

Notes

Les valeurs NULL sont traitées comme les valeurs les plus petites possible.

Il n'y a aucune limite concernant le nombre d'éléments dans la clause ORDER BY. Toutefois, il existe une limite de 8 060 octets pour la taille des lignes des tables de travail intermédiaires nécessaires aux opérations de tri. Ceci limite la taille totale des colonnes spécifiées dans une clause ORDER BY.

Lorsqu'elle est utilisée avec une instruction SELECT...INTO qui insère des lignes provenant d'une autre source, la clause ORDER BY ne garantit pas que les lignes seront insérées dans l'ordre spécifié.

Exemples

Les exemples suivants illustrent le tri d'un jeu de résultats.

Tri par colonne ProductID numérique. Par défaut, le tri s'effectue par ordre croissant.

USE AdventureWorks
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID ;

Tri par colonne ProductID numérique, en ordre décroissant.

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

Tri par colonne Name. Notez que les caractères sont triés par ordre alphabétique, et non par ordre numérique. Autrement dit, 10 arrive avant 2.

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC ;

Tri par deux colonnes. Cette requête effectue un premier tri en ordre croissant par la colonne FirstName, suivi d'un second tri en ordre décroissant par la colonne LastName.

SELECT LastName, FirstName FROM Person.Contact
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC ;