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
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Concatena os resultados de duas consultas em um único conjunto de resultados. Você controla se o conjunto de resultados inclui linhas duplicadas:
- UNIÃO TODOS - Inclui duplicatas.
- UNIÃO - Exclui duplicatas.
Uma operação UNION é diferente de uma JOIN:
- Um UNION concatena conjuntos de resultados de duas consultas. Mas uma UNIÃO não cria linhas individuais a partir de colunas reunidas de duas tabelas.
- Um JOIN compara colunas de duas tabelas para criar linhas de resultado compostas por colunas de duas tabelas.
A seguir estão as regras básicas para combinar os conjuntos de resultados de duas consultas usando UNION:
O número e a ordem das colunas devem ser os mesmos em todas as consultas.
Os tipos de dados devem ser compatíveis.
Transact-SQL convenções de sintaxe
Syntax
{ <query_specification> | ( <query_expression> ) }
{ UNION [ ALL ]
{ <query_specification> | ( <query_expression> ) }
[ ...n ] }
Arguments
< > query_specification | <( query_expression> ) É uma especificação de consulta ou expressão de consulta que retorna dados a serem combinados com os dados de outra especificação de consulta ou expressão de consulta. As definições das colunas que fazem parte de uma operação UNION não precisam ser as mesmas, mas devem ser compatíveis por meio de conversão implícita. Quando os tipos de dados diferem, o tipo de dados resultante é determinado com base nas regras de precedência do tipo de dados. Quando os tipos são os mesmos, mas diferem em precisão, escala ou comprimento, o resultado é baseado nas mesmas regras para combinar expressões. Para obter mais informações, consulte Precisão, escala e comprimento (Transact-SQL).
As colunas do tipo de dados xml devem ser iguais. Todas as colunas devem ser digitadas em um esquema XML ou não tipadas. Se digitados, eles devem ser digitados na mesma coleção de esquema XML.
UNION
Especifica que vários conjuntos de resultados devem ser combinados e retornados como um único conjunto de resultados.
ALL
Incorpora todas as linhas nos resultados, incluindo duplicatas. Se não for especificado, as linhas duplicadas serão removidas.
Examples
A. Usando uma simples UNIÃO
No exemplo a seguir, o conjunto de resultados inclui o conteúdo das ProductModelID colunas e Name das ProductModel tabelas e Gloves .
-- Uses AdventureWorks
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
-- Here is the simple union.
-- Uses AdventureWorks
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
B. Usando SELECT INTO com UNION
No exemplo a seguir, a INTO cláusula na segunda SELECT instrução especifica que a tabela nomeada ProductResults contém o conjunto de resultados finais da união das colunas selecionadas das ProductModel tabelas e Gloves . A Gloves tabela é criada na primeira SELECT instrução.
-- Uses AdventureWorks
IF OBJECT_ID ('dbo.ProductResults', 'U') IS NOT NULL
DROP TABLE dbo.ProductResults;
GO
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
-- Uses AdventureWorks
SELECT ProductModelID, Name
INTO dbo.ProductResults
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO
SELECT ProductModelID, Name
FROM dbo.ProductResults;
C. Usando UNION de duas instruções SELECT com ORDER BY
A ordem de certos parâmetros utilizada com a cláusula UNION é importante. O exemplo a seguir mostra o uso incorreto e correto de UNION duas SELECT instruções nas quais uma coluna deve ser renomeada na saída.
-- Uses AdventureWorks
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
/* INCORRECT */
-- Uses AdventureWorks
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
ORDER BY Name
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO
/* CORRECT */
-- Uses AdventureWorks
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
D. Usando UNION de três instruções SELECT para mostrar os efeitos de ALL e parênteses
Os exemplos a seguir são usados UNION para combinar os resultados de três tabelas que têm as mesmas 5 linhas de dados. O primeiro exemplo usa UNION ALL para mostrar os registros duplicados e retorna todas as 15 linhas. O segundo exemplo usa UNION sem ALL para eliminar as linhas duplicadas dos resultados combinados das três SELECT instruções e retorna 5 linhas.
O terceiro exemplo usa ALL com o primeiro UNION e entre parênteses o segundo UNION que não está usando ALL. O segundo UNION é processado primeiro porque está entre parênteses e retorna 5 linhas porque a ALL opção não é usada e as duplicatas são removidas. Estas 5 linhas são combinadas com os resultados da primeira SELECT usando as UNION ALL palavras-chave. Este exemplo não remove as duplicatas entre os dois conjuntos de cinco linhas. O resultado final tem 10 linhas.
-- Uses AdventureWorks
IF OBJECT_ID ('dbo.EmployeeOne', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeOne;
GO
IF OBJECT_ID ('dbo.EmployeeTwo', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeTwo;
GO
IF OBJECT_ID ('dbo.EmployeeThree', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeThree;
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeOne
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeTwo
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeThree
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
-- Union ALL
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeOne
UNION ALL
SELECT LastName, FirstName ,JobTitle
FROM dbo.EmployeeTwo
UNION ALL
SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeThree;
GO
SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeOne
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree;
GO
SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeOne
UNION ALL
(
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree
);
GO
Exemplos: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Usando uma simples UNIÃO
No exemplo a seguir, o conjunto de resultados inclui o CustomerKey conteúdo das colunas das FactInternetSales tabelas e DimCustomer . Como a palavra-chave ALL não é usada, as duplicatas são excluídas dos resultados.
-- Uses AdventureWorks
SELECT CustomerKey
FROM FactInternetSales
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
F. Usando UNION de duas instruções SELECT com ORDER BY
Quando qualquer instrução SELECT em uma instrução UNION inclui uma cláusula ORDER BY, essa cláusula deve ser colocada após todas as instruções SELECT. O exemplo a seguir mostra o uso incorreto e correto de UNION duas SELECT instruções nas quais uma coluna é ordenada com ORDER BY.
-- Uses AdventureWorks
-- INCORRECT
SELECT CustomerKey
FROM FactInternetSales
ORDER BY CustomerKey
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
-- CORRECT
USE AdventureWorksPDW2012;
SELECT CustomerKey
FROM FactInternetSales
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
G. Usando UNION de duas instruções SELECT com WHERE e ORDER BY
O exemplo a seguir mostra o uso incorreto e correto de UNION duas SELECT instruções onde WHERE e ORDER BY são necessários.
-- Uses AdventureWorks
-- INCORRECT
SELECT CustomerKey
FROM FactInternetSales
WHERE CustomerKey >= 11000
ORDER BY CustomerKey
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
-- CORRECT
USE AdventureWorksPDW2012;
SELECT CustomerKey
FROM FactInternetSales
WHERE CustomerKey >= 11000
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
H. Usando UNION de três instruções SELECT para mostrar efeitos de ALL e parênteses
Os exemplos a seguir usam UNION para combinar os resultados da mesma tabela para demonstrar os efeitos de ALL e parênteses ao usar UNION.
O primeiro exemplo usa UNION ALL para mostrar registros duplicados e retorna cada linha na tabela de origem três vezes. O segundo exemplo usa UNION without ALL para eliminar as linhas duplicadas dos resultados combinados das três SELECT instruções e retorna apenas as linhas não duplicadas da tabela de origem.
O terceiro exemplo usa ALL com o primeiro UNION e parênteses colocando o segundo UNION que não está usando ALL. O segundo UNION é processado primeiro porque está entre parênteses. Ele retorna apenas as linhas não duplicadas da tabela porque a ALL opção não é usada e as duplicatas são removidas. Essas linhas são combinadas com os resultados da primeira SELECT usando as UNION ALL palavras-chave. Este exemplo não remove as duplicatas entre os dois conjuntos.
-- Uses AdventureWorks
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer
UNION ALL
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer
UNION ALL
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer;
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer
UNION
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer
UNION
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer;
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer
UNION ALL
(
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer
UNION
SELECT CustomerKey, FirstName, LastName
FROM DimCustomer
);