Compartilhar via


Cláusula SELECT - ORDER BY (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric

Classifica dados retornados por uma consulta no SQL Server. Use esta cláusula para:

  • Classificar o conjunto de resultados de uma consulta pela lista de colunas especificada e, opcionalmente, limitar as linhas retornadas a um intervalo especificado. A ordem na qual as linhas são retornadas em um conjunto de resultados não é garantida, a menos que uma ORDER BY cláusula seja especificada.

  • Determine a ordem na qual os valores da função de classificação serão aplicados ao conjunto de resultados.

Convenções de sintaxe de Transact-SQL

Observação

ORDER BY não tem suporte em SELECT/INTO instruções ou CREATE TABLE AS SELECT (CTAS) no Azure Synapse Analytics ou no PDW (Analytics Platform System).

Sintaxe

Sintaxe para SQL Server e Banco de Dados SQL do Azure.

ORDER BY order_by_expression
    [ COLLATE collation_name ]
    [ ASC | DESC ]
    [ , ...n ]
[ <offset_fetch> ]

<offset_fetch> ::=
{
    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
    [
      FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
    ]
}

Sintaxe para Azure Synapse Analytics e Parallel Data Warehouse.

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

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

order_by_expression

Especifica uma coluna ou expressão na qual o conjunto de resultados da consulta deve ser classificado. Uma coluna de classificação pode ser especificada como um nome ou alias de coluna, ou um inteiro não negativo que representa a posição da coluna na lista de seleção.

Várias colunas de classificação podem ser especificadas. Os nomes de coluna devem ser exclusivos. A sequência das colunas de classificação na ORDER BY cláusula define a organização do conjunto de resultados classificados. Ou seja, o conjunto de resultados é classificado pela primeira coluna e então essa lista ordenada é classificada pela segunda coluna e assim por diante.

Os nomes de ORDER BY coluna referenciados na cláusula devem corresponder a uma coluna ou alias de coluna na lista de seleção ou a uma coluna definida em uma tabela especificada na FROM cláusula sem ambiguidades. Se a ORDER BY cláusula fizer referência a um alias de coluna da lista de seleção, o alias de coluna deverá ser usado sozinho e não como parte de alguma expressão na ORDER BY cláusula, por exemplo:

SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName; -- correct

SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName + ''; -- wrong

COLLATE collation_name

Especifica que a operação deve ser executada ORDER BY de acordo com a ordenação especificada na collation_name, e não de acordo com a ordenação da coluna, conforme definido na tabela ou exibição. O collation_name pode ser um nome de agrupamento do Windows ou um nome de agrupamento SQL. Para obter mais informações, consulte Suporte de agrupamento e unicode. COLLATE é aplicável somente a colunas do tipo char, varchar, nchar e nvarchar.

ASC | DESC

Define que os valores na coluna especificada devem ser classificados em ordem crescente ou decrescente. ASCclassificar do valor mais baixo para o valor mais alto. DESCclassificar do valor mais alto para o valor mais baixo. ASCé a ordem de classificação padrão. Os valores NULL são tratados como os valores mais baixos possíveis.

OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure.

Especifica o número de linhas que devem ser ignoradas antes de começar a retornar linhas da expressão de consulta. O valor pode ser uma expressão ou constante inteira que seja maior que ou igual a zero.

offset_row_count_expression pode ser uma subconsulta escalar de constante, parâmetro ou variável. Quando uma subconsulta é usada, ela não pode fazer referência a nenhuma coluna definida no escopo da consulta externa. Ou seja, ele não pode ser correlacionado com a consulta externa.

ROW e ROWS são sinônimos e são fornecidos para compatibilidade ANSI.

Nos planos de execução de consulta, o valor da contagem de linhas de deslocamento é exibido no atributo Offset do operador de TOP consulta.

FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure.

Especifica o número de linhas a serem retornadas após o processamento da OFFSET cláusula. O valor pode ser uma expressão ou constante inteira que seja maior que ou igual a um.

fetch_row_count_expression pode ser uma subconsulta escalar de constante, parâmetro ou variável. Quando uma subconsulta é usada, ela não pode fazer referência a nenhuma coluna definida no escopo da consulta externa. Ou seja, ele não pode ser correlacionado com a consulta externa.

FIRST e NEXT são sinônimos e são fornecidos para compatibilidade ANSI.

ROW e ROWS são sinônimos e são fornecidos para compatibilidade ANSI.

Nos planos de execução de consulta, o valor da contagem de linhas de deslocamento é exibido no atributo Linhas ou Topo do operador de TOP consulta.

Práticas recomendadas

Evite especificar inteiros na ORDER BY cláusula como representações posicionais das colunas na lista de seleção. Por exemplo, embora uma instrução como SELECT ProductID, Name FROM Production.Production ORDER BY 2 seja válida, a instrução não é tão facilmente compreendida por outras pessoas em comparação com a especificação do nome real da coluna. Além disso, as alterações na lista de seleção, como alterar a ordem das colunas ou adicionar novas colunas, exigem a modificação da ORDER BY cláusula para evitar resultados inesperados.

Em uma SELECT TOP (<n>) declaração, sempre use uma ORDER BY cláusula. Essa é a única maneira de indicar de forma previsível quais linhas são afetadas por TOP. Para obter mais informações, confira TOP.

Interoperabilidade

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

Usar OFFSET e FETCH em uma exibição não altera a propriedade de capacidade de atualização da exibição.

Limitações

Não há limite para o número de colunas na ORDER BY cláusula. No entanto, o tamanho total das colunas especificadas em uma ORDER BY cláusula não pode exceder 8.060 bytes.

Colunas do tipo ntext, text, image, geography, geometry e xml não podem ser usadas em uma ORDER BY cláusula.

Um inteiro ou constante não pode ser especificado quando order_by_expression aparece em uma função de classificação. Para obter mais informações, consulte Cláusula SELECT - OVER.

Se um nome de tabela tiver alias na FROM cláusula, somente o nome do alias poderá ser usado para qualificar suas colunas na ORDER BY cláusula.

Os nomes de coluna e aliases especificados na ORDER BY cláusula devem ser definidos na lista de seleção se a SELECT instrução contiver uma das seguintes cláusulas ou operadores:

  • Operador UNION
  • Operador EXCEPT
  • Operador INTERSECT
  • SELECT DISTINCT

Além disso, quando a instrução inclui um UNIONoperador , EXCEPT, or INTERSECT , os nomes de coluna ou aliases de coluna devem ser especificados na lista de seleção da primeira consulta (lado esquerdo).

Em uma consulta que usa UNIONoperadores , EXCEPT, ou INTERSECT é ORDER BY permitido somente no final da instrução. Essa restrição se aplica somente a quando você especifica UNION, EXCEPTe INTERSECT em uma consulta de nível superior e não em uma subconsulta. Consulte a seção Exemplos a seguir.

A ORDER BY cláusula não é válida em exibições, funções embutidas, tabelas derivadas e subconsultas, a menos que as TOP cláusulas or OFFSET e FETCH também sejam especificadas. Quando ORDER BY é usado nesses objetos, a cláusula é usada apenas para determinar as linhas retornadas TOP pelas cláusulas clause or OFFSET e FETCH . A ORDER BY cláusula não garante resultados ordenados quando essas construções são consultadas, a menos que ORDER BY também seja especificada na própria consulta.

OFFSET e FETCH não têm suporte em exibições indexadas ou em uma exibição definida usando a CHECK OPTION cláusula.

OFFSET e FETCH pode ser usado em qualquer consulta que permita TOP e ORDER BY com as seguintes limitações:

  • A OVER cláusula não suporta OFFSET e FETCH.

  • OFFSET e FETCH não pode ser especificado diretamente em INSERTinstruções , UPDATE, MERGE, e DELETE , mas pode ser especificado em uma subconsulta definida nessas instruções. Por exemplo, na INSERT INTO SELECT instrução, OFFSET e FETCH pode ser especificado na SELECT instrução.

  • Em uma consulta que usa UNIONoperadores OFFSET , EXCEPT ou INTERSECT e FETCH só pode ser especificado na consulta final que especifica a ordem dos resultados da consulta.

  • TOP não pode ser combinado com OFFSET e FETCH na mesma expressão de consulta (no mesmo escopo de consulta).

Use OFFSET e FETCH para limitar as linhas retornadas

Você deve usar as OFFSET cláusulas and FETCH em vez da TOP cláusula para implementar uma solução de paginação de consulta e limitar o número de linhas enviadas a um aplicativo cliente.

O uso OFFSET de e FETCH como uma solução de paginação requer a execução da consulta uma vez para cada página de dados retornada ao aplicativo cliente. Por exemplo, para retornar os resultados de uma consulta em incrementos de 10 linhas, você deve executar a consulta uma vez para retornar as linhas 1 a 10 e, em seguida, executar a consulta novamente para retornar as linhas 11 a 20 e assim por diante. Cada consulta é independente e elas não são relacionadas entre si. Isso significa que, diferentemente de usar um cursor no qual a consulta é executada uma vez e o estado é mantido no servidor, o aplicativo cliente é responsável para controlar o estado. Para obter resultados estáveis entre solicitações de consulta usando OFFSET e FETCH, as seguintes condições devem ser atendidas:

  1. Os dados subjacentes que são usados pela consulta não devem ser alterados. Ou seja, as linhas tocadas pela consulta não são atualizadas ou todas as solicitações de páginas da consulta são executadas em uma única transação usando o instantâneo ou o isolamento de transação serializável. Para obter mais informações sobre esses níveis de isolamento de transação, consulte SET TRANSACTION ISOLATION LEVEL.

  2. A ORDER BY cláusula contém uma coluna ou combinação de colunas que são garantidas como exclusivas.

Consulte o exemplo "Executando várias consultas em uma única transação" na seção Exemplos mais adiante neste artigo.

Se planos de execução consistentes forem importantes em sua solução de paginação, considere usar a OPTIMIZE FOR dica de consulta para os OFFSET parâmetros and FETCH . Consulte Especificar expressões para valores OFFSET e FETCH na seção Exemplos mais adiante neste artigo. Para obter mais informações sobre OPTIMIZE FORo , consulte Dicas de consulta.

Exemplos

Os exemplos de código do Transact-SQL deste artigo usa o banco de dados de exemplo AdventureWorks2022 ou AdventureWorksDW2022, que pode ser baixado da home page Microsoft SQL Server Samples and Community Projects.

Categoria Elementos de sintaxe em destaque
Sintaxe básica ORDER BY
Especificar ordem crescente e decrescente DESC ou ASC
Especificar uma ordenação COLLATE
Especificar uma ordem condicional Expressão CASE
Usar ORDER BY em uma função de classificação Funções de classificação
Limitar o número de linhas retornadas OFFSET e FETCH
Use ORDER BY com UNION, EXCEPT e INTERSECT UNION

Sintaxe básica

Os exemplos nesta seção demonstram a funcionalidade básica da ORDER BY cláusula usando a sintaxe mínima necessária.

R. Especificar uma única coluna definida na lista de seleção

O exemplo a seguir classifica o conjunto de resultados pela coluna numérica ProductID. Como uma ordem de classificação específica não é especificada, o padrão (ordem crescente) é usado.

USE AdventureWorks2022;
GO

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

B. Especificar uma coluna que não esteja definida na lista de seleção

O exemplo a seguir ordena o conjunto de resultados por uma coluna que não está incluída na lista de seleção, mas é definida na tabela especificada na FROM cláusula.

USE AdventureWorks2022;
GO

SELECT ProductID, Name, Color
FROM Production.Product
ORDER BY ListPrice;

C. Especificar um alias como a coluna de classificação

O exemplo a seguir especifica o alias de coluna SchemaName como a coluna da ordem de classificação.

USE AdventureWorks2022;
GO

SELECT name, SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;

D. Especificar uma expressão como a coluna de classificação

O exemplo a seguir usa uma expressão como a coluna de classificação. A expressão é definida usando a DATEPART função para classificar o conjunto de resultados pelo ano em que os funcionários foram contratados.

USE AdventureWorks2022;
GO

SELECT BusinessEntityID, JobTitle, HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);

Especificar ordem de classificação crescente e decrescente

R. Especificar uma ordem decrescente

O exemplo a seguir classifica o conjunto de resultados pela coluna numérica ProductID na ordem decrescente.

USE AdventureWorks2022;
GO

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

B. Especificar uma ordem crescente

O exemplo a seguir classifica o conjunto de resultados pela coluna Name na ordem crescente. Os caracteres são classificados em ordem alfabética e não em ordem numérica. Ou seja, 10 é tem uma classificação anterior a 2.

USE AdventureWorks2022;
GO

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

C. Especifique a ordem crescente e decrescente

O exemplo a seguir classifica o conjunto de resultados por duas colunas. O conjunto de resultados da consulta é classificado primeiro na ordem crescente pela coluna FirstName e, em seguida, na ordem decrescente pela coluna LastName.

USE AdventureWorks2022;
GO

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

Especificar uma ordenação

O exemplo a seguir mostra como a especificação de uma ordenação na ORDER BY cláusula pode alterar a ordem na qual os resultados da consulta são retornados. É criada uma tabela que contém uma coluna definida usando uma ordenação sem diferenciação de maiúsculas e minúsculas, nem de acentos. Os valores são inseridos com várias diferenças de maiúsculas e minúsculas e acentos. Como uma ordenação não é especificada na ORDER BY cláusula, a primeira consulta usa a ordenação da coluna ao classificar os valores. Na segunda consulta, uma ordenação que diferencia maiúsculas de minúsculas e acentos ORDER BY é especificada na cláusula, o que altera a ordem na qual as linhas são retornadas.

USE tempdb;
GO

CREATE TABLE #t1 (name NVARCHAR(15) COLLATE Latin1_General_CI_AI);
GO

INSERT INTO #t1
VALUES (N'Sánchez'),
    (N'Sanchez'),
    (N'sánchez'),
    (N'sanchez');

-- This query uses the collation specified for the column 'name' for sorting.
SELECT name
FROM #t1
ORDER BY name;

-- This query uses the collation specified in the ORDER BY clause for sorting.
SELECT name
FROM #t1
ORDER BY name COLLATE Latin1_General_CS_AS;

Especificar uma ordem condicional

Os exemplos a seguir usam a CASE expressão em uma ORDER BY cláusula para determinar condicionalmente a ordem de classificação das linhas com base em um determinado valor de coluna. No primeiro exemplo, é avaliado o valor da coluna SalariedFlag da tabela HumanResources.Employee. Funcionários que têm o SalariedFlag definido como 1 são retornados pelo BusinessEntityID em ordem decrescente. Funcionários que têm o SalariedFlag definido como 0 são retornados pelo BusinessEntityID em ordem crescente. No segundo exemplo, o conjunto de resultados será ordenado pela coluna TerritoryName quando a coluna CountryRegionName for igual a 'United States' e por CountryRegionName para todas as outras linhas.

SELECT BusinessEntityID,
    SalariedFlag
FROM HumanResources.Employee
ORDER BY
    CASE SalariedFlag
        WHEN 1 THEN BusinessEntityID
    END DESC,
    CASE 
        WHEN SalariedFlag = 0 THEN BusinessEntityID
    END;
GO
SELECT BusinessEntityID,
    LastName,
    TerritoryName,
    CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY
    CASE CountryRegionName
        WHEN 'United States' THEN TerritoryName
        ELSE CountryRegionName
    END;

Usar ORDER BY em uma função de classificação

O exemplo a seguir usa a ORDER BY cláusula nas funções ROW_NUMBERde classificação , RANK, DENSE_RANKe NTILE.

USE AdventureWorks2022;
GO

SELECT p.FirstName,
    p.LastName,
    ROW_NUMBER() OVER (ORDER BY a.PostalCode) AS "Row Number",
    RANK() OVER (ORDER BY a.PostalCode) AS "Rank",
    DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank",
    NTILE(4) OVER (ORDER BY a.PostalCode) AS "Quartile",
    s.SalesYTD,
    a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
    ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
    ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
    AND SalesYTD <> 0;

Limitar o número de linhas retornadas

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure.

Os exemplos a seguir usam OFFSET e FETCH para limitar o número de linhas retornadas por uma consulta.

R. Especificar constantes inteiras para valores OFFSET e FETCH

O exemplo a seguir especifica uma constante inteira como o valor das OFFSET cláusulas and FETCH . A primeira consulta retorna todas as linhas classificadas pela coluna DepartmentID. Compare os resultados retornados por essa consulta com os resultados das duas consultas seguintes. A próxima consulta usa a cláusula OFFSET 5 ROWS para ignorar as cinco primeiras linhas e retornar todas as linhas restantes. A consulta final usa a cláusula OFFSET 0 ROWS para iniciar com a primeira linha e depois usa FETCH NEXT 10 ROWS ONLY para limitar as linhas retornadas a 10 linhas do conjunto de resultados classificado.

USE AdventureWorks2022;
GO

-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;

-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;

-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;

B. Especificar variáveis para valores OFFSET e FETCH

O exemplo a seguir declara as variáveis @RowsToSkip e @FetchRows especifica essas variáveis nas OFFSET cláusulas e FETCH .

USE AdventureWorks2022;
GO

-- Specifying variables for OFFSET and FETCH values
DECLARE
    @RowsToSkip TINYINT = 2,
    @FetchRows TINYINT = 8;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;

C. Especificar expressões para valores OFFSET e FETCH

O exemplo a seguir usa a expressão @StartingRowNumber - 1 para especificar o OFFSET valor e a expressão @EndingRowNumber - @StartingRowNumber + 1 para especificar o valor FETCH. Além disso, a dica de consulta, OPTIMIZE FOR, é especificada. Essa dica pode ser usada para fornecer um valor específico para uma variável local quando a consulta é compilada e otimizada. O valor é usado somente durante a otimização da consulta e não durante sua execução. Para obter mais informações, consulte Dicas de consulta.

USE AdventureWorks2022;
GO

-- Specifying expressions for OFFSET and FETCH values
DECLARE
    @StartingRowNumber TINYINT = 1,
    @EndingRowNumber TINYINT = 8;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @EndingRowNumber - @StartingRowNumber + 1 ROWS ONLY
OPTION (OPTIMIZE FOR (@StartingRowNumber = 1, @EndingRowNumber = 20));

D. Especificar uma subconsulta escalar constante para valores OFFSET e FETCH

O exemplo a seguir usa uma subconsulta escalar constante para definir o valor da FETCH cláusula. A subconsulta retorna um único valor da coluna PageSize da tabela dbo.AppSettings.

-- Specifying a constant scalar subquery
USE AdventureWorks2022;
GO

CREATE TABLE dbo.AppSettings (
    AppSettingID INT NOT NULL,
    PageSize INT NOT NULL
);
GO

INSERT INTO dbo.AppSettings
VALUES (1, 10);
GO

DECLARE @StartingRowNumber TINYINT = 1;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber ROWS
FETCH NEXT (
    SELECT PageSize
    FROM dbo.AppSettings
    WHERE AppSettingID = 1
) ROWS ONLY;

E. Executar várias consultas em uma única transação

O exemplo a seguir mostra um método de implementação de uma solução de paginação que assegura que sejam retornados resultados estáveis em todas as solicitações da consulta. A consulta é executada em uma única transação usando o nível de isolamento de instantâneo e a coluna especificada na cláusula garante a ORDER BY exclusividade da coluna.

USE AdventureWorks2022;
GO

-- Ensure the database can support the snapshot isolation level set for the query.
IF (
    SELECT snapshot_isolation_state
    FROM sys.databases
    WHERE name = N'AdventureWorks2022'
) = 0
ALTER DATABASE AdventureWorks2022
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

-- Set the transaction isolation level  to SNAPSHOT for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO

-- Beginning the transaction.
BEGIN TRANSACTION;
GO

-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE
    @StartingRowNumber INT = 1,
    @RowCountPerPage INT = 3;

-- Create the condition to stop the transaction after all rows have been returned.
WHILE (
    SELECT COUNT(*)
    FROM HumanResources.Department
) >= @StartingRowNumber
BEGIN
    -- Run the query until the stop condition is met.
    SELECT DepartmentID, Name, GroupName
    FROM HumanResources.Department
    ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
    FETCH NEXT @RowCountPerPage ROWS ONLY;

    -- Increment @StartingRowNumber value.
    SET @StartingRowNumber = @StartingRowNumber + @RowCountPerPage;

    CONTINUE
END;
GO

COMMIT TRANSACTION;
GO

Use ORDER BY com UNION, EXCEPT e INTERSECT

Quando uma consulta usa os UNIONoperadores , EXCEPT, ou INTERSECT , a ORDER BY cláusula deve ser especificada no final da instrução e os resultados das consultas combinadas são classificados. O exemplo as seguir retorna todos os produtos que são vermelhos ou amarelos e classifica essa lista combinada pela coluna ListPrice.

USE AdventureWorks2022;
GO

SELECT Name, Color, ListPrice
FROM Production.Product
WHERE Color = 'Red'
-- ORDER BY cannot be specified here.

UNION ALL

SELECT Name, Color, ListPrice
FROM Production.Product
WHERE Color = 'Yellow'
ORDER BY ListPrice ASC;

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

O exemplo a seguir demonstra a ordenação de um conjunto de resultados pela coluna numérica EmployeeKey em ordem crescente.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;

O exemplo a seguir classifica um conjunto de resultados pela coluna numérica EmployeeKey em ordem decrescente.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;

O exemplo a seguir classifica um conjunto de resultados pela coluna LastName.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;

O exemplo a seguir ordena por duas colunas. Esta consulta classifica primeiro em ordem crescente pela coluna FirstName e, em seguida, classifica os valores comuns de FirstName em ordem decrescente pela coluna LastName.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;