Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma Analítica (PDW)
Ponto de extremidade de análise SQL no Microsoft Fabric
Warehouse no Microsoft Fabric
Banco de dados SQL no Microsoft Fabric Preview
Classifica os dados retornados por uma consulta no SQL Server. Utilize esta cláusula para:
Ordene o conjunto de resultados de uma consulta pela lista de colunas especificada e, opcionalmente, limite 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 são aplicados ao conjunto de resultados.
Transact-SQL convenções de sintaxe
Note
ORDER BY
não é suportado em SELECT
/INTO
instruções ou CREATE TABLE AS SELECT
(CTAS) no Azure Synapse Analytics ou no Analytics Platform System (PDW).
Syntax
Sintaxe do SQL Server e do 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 o Azure Synapse Analytics e o Parallel Data Warehouse.
[ ORDER BY
{
order_by_expression
[ ASC | DESC ]
} [ , ...n ]
]
Arguments
order_by_expression
Especifica uma coluna ou expressão na qual classificar o conjunto de resultados da consulta. 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 das colunas têm de 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, em seguida, essa lista ordenada é classificada pela segunda coluna, e assim por diante.
Os nomes de ORDER BY
coluna mencionados na cláusula devem corresponder a um alias de coluna ou coluna na lista de seleção ou a uma coluna definida em uma tabela especificada na FROM
cláusula sem quaisquer 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 por conta própria, 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 ORDER BY
operação 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. O collation_name pode ser um nome de agrupamento do Windows ou um nome de agrupamento SQL. Para obter mais informações, consulte Classificação e suporte a Unicode.
COLLATE
é aplicável apenas para colunas do tipo char, varchar, nchare nvarchar.
ASC | DESC
Especifica que os valores na coluna especificada devem ser classificados em ordem crescente ou decrescente.
ASC
classifica do menor valor para o maior valor.
DESC
classifica do valor mais alto para o valor mais baixo.
ASC
é a ordem de classificação padrão.
NULL
são tratados como os valores mais baixos possíveis.
OFFSET { integer_constant | offset_row_count_expression } { LINHA | LINHAS }
Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure.
Especifica o número de linhas a serem ignoradas antes de começar a retornar linhas da expressão de consulta. O valor pode ser uma constante inteira ou uma expressão maior ou igual a zero.
offset_row_count_expression pode ser uma variável, parâmetro ou subconsulta escalar constante. Quando uma subconsulta é usada, ela não pode fazer referência a nenhuma coluna definida no escopo da consulta externa. Ou seja, 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 { PRIMEIRO | NEXT } { integer_constant | fetch_row_count_expression } { LINHA | APENAS LINHAS }
Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada 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 constante inteira ou uma expressão maior ou igual a uma.
fetch_row_count_expression pode ser uma variável, parâmetro ou subconsulta escalar constante. Quando uma subconsulta é usada, ela não pode fazer referência a nenhuma coluna definida no escopo da consulta externa. Ou seja, 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 Top do TOP
operador de consulta.
Best practices
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
a 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, 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, use sempre uma ORDER BY
cláusula. Esta é a única maneira de indicar de forma previsível quais linhas são afetadas por TOP
. Para obter mais informações, consulte TOP.
Interoperability
Quando usada com uma SELECT...INTO
instrução or para INSERT...SELECT
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 um modo de exibição não altera a propriedade updateability do modo de exibição.
Limitations
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 FROM
tabela for aliased na 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:
-
UNION
Operador -
EXCEPT
Operador -
INTERSECT
Operador SELECT DISTINCT
Além disso, quando a instrução inclui um UNION
, EXCEPT
ou INTERSECT
operador, 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
, EXCEPT
ou INTERSECT
operadores, ORDER BY
é permitido somente no final da instrução. Essa restrição se aplica somente quando você especifica UNION
, EXCEPT
e INTERSECT
em uma consulta de nível superior e não em uma subconsulta. Consulte a secção Exemplos que se segue.
A ORDER BY
cláusula não é válida em modos de exibição, funções embutidas, tabelas derivadas e subconsultas, a menos que as TOP
cláusulas ou OFFSET
e e FETCH
também sejam especificadas. Quando ORDER BY
é usada nesses objetos, a cláusula é usada apenas para determinar as linhas retornadas pela TOP
cláusula ou OFFSET
e FETCH
cláusulas. 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 são suportados em modos de exibição indexados ou em um modo de exibição definido usando a CHECK OPTION
cláusula.
OFFSET
e FETCH
pode ser utilizado 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
,UPDATE
,MERGE
eDELETE
instruções, 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
operadores ,EXCEPT
ouINTERSECT
OFFSET
eFETCH
só pode ser especificada 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 cláusula para implementar uma solução de TOP
paginação de consulta e limitar o número de linhas enviadas para um aplicativo cliente.
Usar OFFSET
e FETCH
como uma solução de paginação requer a execução da consulta uma vez para cada página de dados retornados 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 não está relacionada entre si de forma alguma. Isso significa que, ao contrário de usar um cursor no qual a consulta é executada uma vez e o estado é mantido no servidor, o aplicativo cliente é responsável pelo rastreamento do 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 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 instantâneo ou 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 garantidamente 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 dica OPTIMIZE FOR
de consulta para os OFFSET
parâmetros e 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.
Examples
Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2022
ou AdventureWorksDW2022
, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.
Category | Elementos de sintaxe em destaque |
---|---|
Basic syntax | ORDER BY |
Especificar ordem crescente e decrescente |
DESC ou ASC |
Especificar um agrupamento | COLLATE |
Especificar uma ordem condicional |
CASE expressão |
Usar ORDER BY em uma função de classificação | Ranking functions |
Limitar o número de linhas retornadas |
OFFSET e FETCH |
Use ORDER BY com UNION, EXCEPT, e INTERSECT | UNION |
Basic syntax
Os exemplos nesta seção demonstram a funcionalidade básica da cláusula ORDER BY
usando a sintaxe mínima necessária.
A. Especificar uma única coluna definida na lista de seleção
O exemplo a seguir ordena o resultado definido 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 está definida na lista de seleção
O exemplo a seguir ordena o resultado definido 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 SchemaName
da coluna como a coluna de 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 resultado definido 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
A. Especificar uma ordem decrescente
O exemplo a seguir ordena o resultado definido pela coluna ProductID
numérica em 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 ordena o resultado definido pela Name
coluna em ordem crescente. Os caracteres são ordenados alfabeticamente, não numericamente. Ou seja, 10 tipos antes de 2.
USE AdventureWorks2022;
GO
SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC;
C. Especificar ordem crescente e decrescente
O exemplo a seguir ordena o resultado definido por duas colunas. O conjunto de resultados da FirstName
consulta é primeiro classificado em ordem crescente pela coluna e, em seguida, ordenado por ordem decrescente pela LastName
coluna.
USE AdventureWorks2022;
GO
SELECT LastName, FirstName
FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC;
Especificar um agrupamento
O exemplo a seguir mostra como a ORDER BY
especificação de um agrupamento na 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 um agrupamento que não diferencia maiúsculas de minúsculas e acentos. Os valores são inseridos com várias diferenças de maiúsculas e minúsculas e acentos. Como um agrupamento não é especificado na ORDER BY
cláusula, a primeira consulta usa o agrupamento da coluna ao classificar os valores. Na segunda consulta, um agrupamento que diferencia maiúsculas de minúsculas ORDER BY
e acento é especificado na cláusula, que altera a ordem em que 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, o valor na SalariedFlag
coluna da HumanResources.Employee
tabela é avaliado. Os funcionários que têm o SalariedFlag
conjunto como 1 são devolvidos em ordem BusinessEntityID
pela ordem decrescente. Os funcionários que têm o SalariedFlag
conjunto como 0 são devolvidos em ordem BusinessEntityID
crescente pela ordem crescente. No segundo exemplo, o conjunto de resultados é ordenado pela coluna TerritoryName
quando a coluna CountryRegionName
é igual a 'Estados Unidos' e por CountryRegionName
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 , , DENSE_RANK
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 SQL do Azure.
Os exemplos a seguir usam OFFSET
e FETCH
para limitar o número de linhas retornadas por uma consulta.
A. 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 ordenadas pela coluna DepartmentID
. Compare os resultados retornados por esta consulta com os resultados das duas consultas que a seguem. 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 começar com a primeira linha e, em seguida, usa FETCH NEXT 10 ROWS ONLY
para limitar as linhas retornadas a 10 linhas do conjunto de resultados classificados.
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 and 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 a execução da consulta. 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
na 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 garante que resultados estáveis sejam retornados 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 exclusividade da ORDER BY
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 , ORDER BY
a INTERSECT
cláusula deve ser especificada no final da instrução e os resultados das consultas combinadas são classificados. O exemplo a seguir retorna todos os produtos 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 and Analytics Platform System (PDW)
O exemplo a seguir demonstra a ordenação de um resultado definido 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 ordena um resultado definido 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 LastName
seguir ordena um resultado definido pela coluna.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;
O exemplo a seguir ordena por duas colunas. Essa consulta primeiro classifica em ordem crescente pela FirstName
coluna e, em seguida, classifica os valores comuns FirstName
em ordem decrescente pela LastName
coluna.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;
Related content
- Expressions (Transact-SQL)
- SELECT (Transact-SQL)
- Cláusula FROM mais JOIN, APPLY, PIVOT (Transact-SQL)
- Classificação de funções (Transact-SQL)
- TOP (Transact-SQL)
- Dicas de consulta (Transact-SQL)
- Operadores de Conjunto - EXCEPT e INTERSECT (Transact-SQL)
- Operadores de Conjuntos - UNION (Transact-SQL)
- CASE (Transact-SQL)