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. ASC
classificar do valor mais baixo para o valor mais alto. DESC
classificar 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 UNION
operador , 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 UNION
operadores , EXCEPT
, ou INTERSECT
é ORDER BY
permitido somente no final da instrução. Essa restrição se aplica somente a quando você especifica UNION
, EXCEPT
e 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 suportaOFFSET
eFETCH
.OFFSET
eFETCH
não pode ser especificado diretamente emINSERT
instruções ,UPDATE
,MERGE
, eDELETE
, mas pode ser especificado em uma subconsulta definida nessas instruções. Por exemplo, naINSERT INTO SELECT
instrução,OFFSET
eFETCH
pode ser especificado naSELECT
instrução.Em uma consulta que usa
UNION
operadoresOFFSET
,EXCEPT
ouINTERSECT
eFETCH
só pode ser especificado na consulta final que especifica a ordem dos resultados da consulta.TOP
não pode ser combinado comOFFSET
eFETCH
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:
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.
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 FOR
o , 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_NUMBER
de classificação , RANK
, DENSE_RANK
e 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 UNION
operadores , 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;
Conteúdo relacionado
- Expressões (Transact-SQL)
- SELECT (Transact-SQL)
- Cláusula FROM mais JOIN, APPLY, PIVOT (Transact-SQL)
- Funções de classificação (Transact-SQL)
- TOP (Transact-SQL)
- Dicas de consulta (Transact-SQL)
- Operadores de conjunto – EXCEPT e INTERSECT (Transact-SQL)
- Set Operators – UNION (Transact-SQL)
- CASE (Transact-SQL)