Cláusula ORDER BY [Transact-SQL]

Especifica a ordem de classificação usada nas colunas retornadas de uma instrução SELECT. A cláusula ORDER BY não é válida em exibições, funções embutidas, tabelas derivadas e subconsultas, a menos que TOP também seja especificada.

ObservaçãoObservação

Quando ORDER BY é usada na definição de uma exibição, função embutida, tabela derivada ou subconsulta, a cláusula é utilizada apenas para determinar as linhas retornadas pela cláusula TOP. A cláusula ORDER BY não garante resultados ordenados quando essas construções são consultadas, a menos que ORDER BY também seja especificada na consulta em si.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • order_by_expression
    Especifica uma coluna na qual ordenar. Uma coluna de classificação pode ser especificada como um nome ou alias de coluna, ou um inteiro não negativo representando a posição do nome ou alias na lista de seleção. Um inteiro não pode ser especificado quando o order_by_expression é exibido em uma função de classificação. Uma coluna de classificação pode incluir uma expressão, mas quando o banco de dados está no modo de compatibilidade (90) do SQL Server, a expressão não pode ser resolvida como uma constante. Os nomes de coluna e aliases podem ser qualificados pela tabela ou nome de exibição. No SQL Server, os nomes de coluna e aliases qualificados são resolvidos em colunas listadas na cláusula FROM. Se order_by_expression não for qualificado, o valor deverá ser exclusivo entre todas as colunas listadas na instrução SELECT.

    Várias colunas de classificação podem ser especificadas. A sequência das colunas de classificação na cláusula ORDER BY define a organização do conjunto de resultados classificado.

    A cláusula ORDER BY pode incluir itens que não são exibidos na lista de seleção. Entretanto, se SELECT DISTINCT for especificado, se a instrução tiver uma cláusula GROUP BY ou se a instrução SELECT tiver um operador UNION, as colunas de classificação deverão ser exibidas na lista de seleção.

    Além disso, quando a instrução SELECT incluir um operador UNION, os nomes ou aliases de coluna deverão ser aqueles especificados na primeira lista de seleção.

    ObservaçãoObservação

    As colunas ntext, text, imageou xmlnão podem ser usadas em uma cláusula ORDER BY.

  • COLLATE {collation_name}
    Especifica que a operação ORDER BY deve ser executada de acordo com o agrupamento especificado em collation_name, e não de acordo com o agrupamento da coluna conforme definido na tabela ou exibição. collation_name pode ser um nome de agrupamento do Windows ou um nome de agrupamento SQL. Para obter mais informações, consulte Configurações de agrupamento na Instalação e Usando agrupamentos do SQL Server. COLLATE é aplicável somente para colunas de tipo de dados char, varchar, nchare nvarchar.

  • ASC
    Especifica que os valores na coluna definida devem ser classificados na ordem crescente, do menor valor para o maior. ASC é a classificação padrão.

  • DESC
    Especifica que os valores na coluna definida devem ser classificados na ordem decrescente, do menor valor para o maior.

Comentários

Valores nulos são tratados como os menores valores possíveis.

Não há nenhum limite para o número de itens na cláusula ORDER BY. Entretanto, há um limite de 8.060 bytes para o tamanho de linha de tabelas de trabalho de intermediárias necessário em operações de classificação. Isso limita o tamanho total de colunas especificado em uma cláusula ORDER BY.

Quando usada com uma instrução SELECT...INTO para inserir linhas de outra fonte, a cláusula ORDER BY não garante que as linhas sejam inseridas na ordem especificada.

Exemplos

Os exemplos a seguir mostram a ordenação de um conjunto de resultados.

Ordenação pela coluna numérica ProductID. O padrão está na ordem crescente.

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

Ordenação pela coluna numérica ProductID na ordem decrescente.

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

Ordenação pela coluna numérica Name. Observe que os caracteres são classificados alfabeticamente, não numericamente. Isto é, 10 é classificado antes de 2.

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

Ordenação por duas colunas. Esta consulta classifica primeiro em ordem crescente pela coluna FirstName e, em seguida, classifica em ordem decrescente pela coluna LastName.

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