Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Voegt de resultaten van twee query's samen in één resultatenset. U bepaalt of de resultatenset dubbele rijen bevat:
- UNION ALL - Bevat duplicaten.
- UNION : sluit duplicaten uit.
Een UNION-bewerking verschilt van een JOIN:
- Een UNION voegt resultatensets uit twee query's samen. Een UNION maakt echter geen afzonderlijke rijen van kolommen die uit twee tabellen zijn verzameld.
- Een JOIN vergelijkt kolommen uit twee tabellen om resultaatrijen te maken die bestaan uit kolommen uit twee tabellen.
Hier volgen basisregels voor het combineren van de resultatensets van twee query's met behulp van UNION:
- Het getal en de volgorde van de kolommen moeten in alle query's hetzelfde zijn. 
- De gegevenstypen moeten compatibel zijn. 
              
              
              Transact-SQL syntaxis-conventies
Syntax
{ <query_specification> | ( <query_expression> ) }   
{ UNION [ ALL ]   
  { <query_specification> | ( <query_expression> ) } 
  [ ...n ] }
Arguments
< > query_specification | ( <query_expression> ) Is een queryspecificatie of query-expressie die gegevens retourneert die moeten worden gecombineerd met de gegevens uit een andere queryspecificatie of query-expressie. De definities van de kolommen die deel uitmaken van een UNION-bewerking hoeven niet hetzelfde te zijn, maar ze moeten compatibel zijn via impliciete conversie. Wanneer gegevenstypen verschillen, wordt het resulterende gegevenstype bepaald op basis van de regels voor prioriteit van gegevenstypen. Wanneer de typen hetzelfde zijn, maar verschillen in precisie, schaal of lengte, is het resultaat gebaseerd op dezelfde regels voor het combineren van expressies. Zie Precisie, Schaal en Lengte (Transact-SQL) voor meer informatie.
Kolommen van het xml-gegevenstype moeten gelijk zijn. Alle kolommen moeten worden getypt in een XML-schema of niet zijn getypt. Als deze zijn getypt, moeten ze worden getypt naar dezelfde XML-schemaverzameling.
UNION
Hiermee geeft u op dat meerdere resultatensets moeten worden gecombineerd en als één resultatenset moeten worden geretourneerd.
ALL
Hiermee worden alle rijen opgenomen in de resultaten, inclusief duplicaten. Als dit niet is opgegeven, worden dubbele rijen verwijderd.
Examples
A. Een eenvoudige UNION gebruiken
In het volgende voorbeeld bevat de resultatenset de inhoud van de ProductModelID en Name kolommen van zowel de als Gloves de ProductModel tabellen.
-- 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. SELECT INTO gebruiken met UNION
In het volgende voorbeeld geeft de INTO component in de tweede SELECT instructie aan dat de tabel met de naam ProductResults de uiteindelijke resultatenset bevat van de samenvoeging van de geselecteerde kolommen van de ProductModel en Gloves tabellen. De Gloves tabel wordt gemaakt in de eerste SELECT instructie.
-- 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. UNION van twee SELECT-instructies gebruiken met ORDER BY
De volgorde van bepaalde parameters die worden gebruikt met de UNION-component is belangrijk. In het volgende voorbeeld ziet u het onjuiste en juiste gebruik van in twee SELECT instructies waarin de naam van UNION een kolom moet worden gewijzigd in de uitvoer.
-- 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. UNION van drie SELECT-instructies gebruiken om de effecten van ALL en haakjes weer te geven
In de volgende voorbeelden worden UNION de resultaten van drie tabellen gecombineerd die allemaal dezelfde vijf rijen met gegevens hebben. In het eerste voorbeeld UNION ALL worden de gedupliceerde records weergegeven en worden alle 15 rijen geretourneerd. In het tweede voorbeeld UNIONALL worden de dubbele rijen uit de gecombineerde resultaten van de drie SELECT instructies verwijderd en worden vijf rijen geretourneerd.
In het derde voorbeeld wordt ALL gebruikgemaakt van de eerste UNION haakjes en plaatst u de tweede UNION die niet wordt gebruikt ALL. De tweede UNION wordt eerst verwerkt omdat deze haakjes bevat en vijf rijen retourneert omdat de ALL optie niet wordt gebruikt en de duplicaten worden verwijderd. Deze vijf rijen worden gecombineerd met de resultaten van de eerste SELECT met behulp van de UNION ALL trefwoorden. In dit voorbeeld worden de duplicaten tussen de twee sets van vijf rijen niet verwijderd. Het uiteindelijke resultaat heeft 10 rijen.
-- 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  
  
Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Een eenvoudige UNION gebruiken
In het volgende voorbeeld bevat de resultatenset de inhoud van de kolommen van zowel de CustomerKey als de DimCustomerFactInternetSales tabellen. Omdat het trefwoord ALL niet wordt gebruikt, worden duplicaten uitgesloten van de resultaten.
-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales    
UNION   
SELECT CustomerKey   
FROM DimCustomer   
ORDER BY CustomerKey;  
F. UNION van twee SELECT-instructies gebruiken met ORDER BY
Wanneer een SELECT-instructie in een UNION-instructie een ORDER BY-component bevat, moet die component na alle SELECT-instructies worden geplaatst. In het volgende voorbeeld ziet u het onjuiste en juiste gebruik van UNION in twee SELECT instructies waarin een kolom is geordend met 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. UNION van twee SELECT-instructies gebruiken met WHERE en ORDER BY
In het volgende voorbeeld ziet u het onjuiste en juiste gebruik van UNION in twee SELECT instructies waarbij WHERE en ORDER BY nodig zijn.
-- 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. UNION van drie SELECT-instructies gebruiken om effecten van ALL en haakjes weer te geven
In de volgende voorbeelden worden UNION de resultaten van dezelfde tabel gecombineerd om de effecten van ALL en haakjes te demonstreren bij gebruik UNION.
In het eerste voorbeeld worden UNION ALL dubbele records weergegeven en wordt elke rij in de brontabel drie keer geretourneerd. In het tweede voorbeeld UNIONALL worden de dubbele rijen uit de gecombineerde resultaten van de drie SELECT instructies verwijderd en worden alleen de niet-ontdubbelde rijen uit de brontabel geretourneerd.
In het derde voorbeeld wordt ALL gebruikgemaakt van de eerste UNION haakjes tussen de tweede UNION die niet wordt gebruikt ALL. De tweede UNION wordt eerst verwerkt omdat deze zich tussen haakjes bevindt. Deze retourneert alleen de niet-ontdubbelde rijen uit de tabel omdat de ALL optie niet wordt gebruikt en duplicaten worden verwijderd. Deze rijen worden gecombineerd met de resultaten van de eerste SELECT met behulp van de UNION ALL trefwoorden. In dit voorbeeld worden de duplicaten tussen de twee sets niet verwijderd.
-- 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  
);