Clausola ORDER BY (Transact-SQL)

Specifica il tipo di ordinamento utilizzato per le colonne restituite in un'istruzione SELECT. La clausola ORDER BY non è valida in viste, funzioni inline, tabelle derivate e sottoquery, a meno che non sia specificata la parola chiave TOP.

[!NOTA]

Nella definizione di una vista, di una funzione inline, di una tabella derivata o di una sottoquery, la clausola ORDER BY viene utilizzata esclusivamente per determinare le righe restituite dalla clausola TOP. La clausola ORDER BY non garantisce risultati ordinati in caso di query su questi costrutti, a meno che tale clausola non venga specificata anche nella query.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • order_by_expression
    Specifica la colonna di ordinamento. Per specificare la colonna di ordinamento è possibile utilizzare il nome, l'alias di colonna oppure un valore integer non negativo rappresentante la posizione del nome o dell'alias nell'elenco di selezione. Non è possibile specificare un valore integer quando l'argomento order_by_expression è incluso in una funzione di rango. Una colonna di ordinamento può includere un'espressione, ma quando il database è in modalità compatibilità (90) di SQL Server, l'espressione non può essere risolta in una costante. I nomi e gli alias di colonna possono includere il nome della tabella o della vista. In SQL Server i nomi e gli alias di colonna completi vengono risolti nelle colonne elencate nella clausola FROM. Se il valore specificato in order_by_expression non è completo, deve essere univoco tra tutte le colonne elencate nell'istruzione SELECT.

    È possibile specificare più colonne di ordinamento. La sequenza delle colonne di ordinamento nella clausola ORDER BY definisce l'organizzazione del set di risultati ordinato.

    La clausola ORDER BY può includere elementi non inclusi nell'elenco di selezione. Se, tuttavia, viene specificata la clausola SELECT DISTINCT o se l'istruzione SELECT contiene una clausola GROUP BY o un operatore UNION, le colonne di ordinamento devono essere incluse nell'elenco di selezione.

    Inoltre, quando l'istruzione SELECT include un operatore UNION, i nomi o gli alias di colonna devono corrispondere a quelli specificati nel primo elenco di selezione.

    [!NOTA]

    In una clausola ORDER BY non è possibile utilizzare colonne di tipo ntext, text, image o xml.

  • COLLATE {collation_name}
    Specifica che l'operazione ORDER BY deve essere eseguita in base alle regole di confronto indicate in collation_name anziché in base a quelle della colonna definite nella tabella o nella vista. collation_name può essere un nome di regole di confronto di Windows o SQL. Per ulteriori informazioni, vedere Impostazioni delle regole di confronto durante l'installazione e Utilizzo di regole di confronto di SQL Server. Il parametro COLLATE può essere applicato solo a colonne con i tipi di dati char, varchar, nchar e nvarchar.

  • ASC
    Specifica che i valori della colonna specificata devono essere disposti in ordine crescente, dal valore minimo al valore massimo. ASC è l'ordinamento predefinito.

  • DESC
    Specifica che i valori della colonna specificata devono essere disposti in ordine decrescente, dal valore massimo al valore minimo.

Osservazioni

I valori Null vengono considerati i valori in assoluto più bassi.

Non esiste alcuna limitazione per il numero di elementi della clausola ORDER BY. Sono tuttavia previste dimensioni massime pari a 8.060 byte per le righe delle tabelle di lavoro intermedie necessarie per le operazioni di ordinamento, il che limita le dimensioni totali delle colonne specificate in una clausola ORDER BY.

Quando viene utilizzata insieme a un'istruzione SELECT...INTO per l'aggiunta di righe da un'altra origine, la clausola ORDER BY non garantisce l'inserimento delle righe nell'ordine specificato.

Esempi

Negli esempi seguenti viene illustrato l'ordinamento di un set di risultati.

Ordinamento in base alla colonna ProductID numerica. Per impostazione predefinita, l'ordinamento è crescente.

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

Ordinamento in ordine decrescente in base alla colonna ProductID numerica.

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

Ordinamento in base alla colonna Name. So noti che i caratteri sono ordinati alfabeticamente, non numericamente. Di conseguenza, il numero precede il numero 2.

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

Ordinamento in base a due colonne. Questa query esegue l'ordinamento crescente in base alla colonna FirstName, quindi esegue un ordinamento decrescente in base alla colonna LastName.

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