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
);