Aracılığıyla paylaş


İşleçleri Ayarla - UNION (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

İki sorgunun sonuçlarını tek bir sonuç kümesinde birleştirir. Sonuç kümesinin yinelenen satırlar içerip içermediğini denetlersiniz:

  • UNION ALL - Yinelenenleri içerir.
  • UNION - Yinelenenleri dışlar.

UNION işlemi JOIN işleminden farklıdır:

  • UNION, sonuç kümelerini iki sorgudan birleştirir. Ancak UNION , iki tablodan toplanan sütunlardan tek tek satırlar oluşturmaz.
  • JOIN, iki tablodaki sütunları karşılaştırarak iki tablodaki sütunlardan oluşan sonuç satırları oluşturur.

UNION kullanarak iki sorgunun sonuç kümelerini birleştirmeye yönelik temel kurallar aşağıdadır:

  • Sütunların sayısı ve sırası tüm sorgularda aynı olmalıdır.

  • Veri türlerinin uyumlu olması gerekir.

Transact-SQL söz dizimi kuralları

Syntax

{ <query_specification> | ( <query_expression> ) }   
{ UNION [ ALL ]   
  { <query_specification> | ( <query_expression> ) } 
  [ ...n ] }

Arguments

< > query_specification | ( <query_expression> ) Başka bir sorgu belirtiminden veya sorgu ifadesinden gelen verilerle birleştirilecek verileri döndüren bir sorgu belirtimi veya sorgu ifadesidir. UNION işleminin parçası olan sütunların tanımlarının aynı olması gerekmez, ancak örtük dönüştürme ile uyumlu olmaları gerekir. Veri türleri farklı olduğunda, sonuçta elde edilen veri türü , veri türü önceliği kurallarına göre belirlenir. Türler aynı olduğunda ancak duyarlık, ölçek veya uzunluk bakımından farklı olduğunda, sonuç ifadeleri birleştirmek için aynı kurallara dayanır. Daha fazla bilgi için bkz . Duyarlık, Ölçek ve Uzunluk (Transact-SQL).

Xml veri türünün sütunları eşit olmalıdır. Tüm sütunlar bir XML şemasına yazılmalıdır veya yazılmamış olmalıdır. Yazıldıysa, aynı XML şema koleksiyonuna yazılmalıdır.

UNION
Birden çok sonuç kümesinin birleştirilip tek bir sonuç kümesi olarak döndürüldüğünü belirtir.

ALL
Yinelenenler de dahil olmak üzere tüm satırları sonuçlara ekler. Belirtilmezse, yinelenen satırlar kaldırılır.

Examples

A. Basit bir UNION kullanma

Aşağıdaki örnekte, sonuç kümesi hem hem de ProductModelIDName tablolarının ProductModel ve Gloves sütunlarının içeriğini içerir.

-- 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. UNION ile SELECT INTO kullanma

Aşağıdaki örnekte, INTO ikinci SELECT deyimdeki yan tümcesi adlı ProductResults tablonun ve ProductModel tablolarının seçili sütunlarının Gloves birleşiminin son sonuç kümesini barındırdığını belirtir. Tablo Gloves ilk SELECT deyimde oluşturulur.

-- 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. ORDER BY ile iki SELECT deyiminin UNION kullanma

UNION yan tümcesiyle kullanılan belirli parametrelerin sırası önemlidir. Aşağıdaki örnekte, bir sütunun UNION çıktıda yeniden adlandırılacağı iki SELECT deyimde yanlış ve doğru kullanımı gösterilmektedir.

-- 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. ALL ve parantezlerin etkilerini göstermek için üç SELECT deyiminin UNION kullanma

Aşağıdaki örnekler, tümü aynı 5 veri satırına sahip üç tablonun sonuçlarını birleştirmek için kullanılır UNION . İlk örnek, yinelenen kayıtları göstermek için kullanır UNION ALL ve 15 satırın tümünü döndürür. İkinci örnek, üç UNION deyimin birleşik sonuçlarından yinelenen satırları ortadan kaldırmak için without ALL kullanır SELECT ve 5 satır döndürür.

Üçüncü örnek, ilk ALL ve parantezleri kullanmayan UNIONikinciyi UNION kapsayan ile kullanırALL. İkinci UNION seçenek parantez içinde olduğundan önce işlenir ve seçenek kullanılmadığından ve yinelenenler kaldırıldığından ALL 5 satır döndürür. Bu 5 satır, anahtar sözcükler kullanılarak ilk SELECT satırın UNION ALL sonuçlarıyla birleştirilir. Bu örnek, beş satırdan oluşan iki küme arasındaki yinelemeleri kaldırmaz. Nihai sonucun 10 satırı vardır.

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

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

E. Basit bir UNION kullanma

Aşağıdaki örnekte, sonuç kümesi hem hem CustomerKey de FactInternetSales tablolarının sütunlarının içeriğini DimCustomer içerir. ALL anahtar sözcüğü kullanılmadığından, yinelenenler sonuçlardan dışlanır.

-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales    
UNION   
SELECT CustomerKey   
FROM DimCustomer   
ORDER BY CustomerKey;  

F. ORDER BY ile iki SELECT deyiminin UNION kullanma

UNION deyimindeki herhangi bir SELECT deyimi ORDER BY yan tümcesi içerdiğinde, bu yan tümce tüm SELECT deyimlerinden sonra yerleştirilmelidir. Aşağıdaki örnekte, bir sütunun UNION ORDER BY ile sıralandığı iki SELECT deyimde yanlış ve doğru kullanımı gösterilmektedir.

-- 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. WHERE ve ORDER BY ile iki SELECT deyiminin UNION kullanma

Aşağıdaki örnekte WHERE ve ORDER BY değerlerinin UNION gerekli olduğu iki SELECT deyimde yanlış ve doğru kullanımı gösterilmektedir.

-- 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. ALL ve parantezlerin etkilerini göstermek için üç SELECT deyiminin UNION'ını kullanma

Aşağıdaki örnekler, kullanırken ALL ve parantezlerin etkilerini göstermek için UNION sonuçlarını birleştirmek için kullanılırUNION.

İlk örnek yinelenen kayıtları göstermek için kullanır UNION ALL ve kaynak tablodaki her satırı üç kez döndürür. İkinci örnek, üç UNION deyimin birleşik sonuçlarından yinelenen satırları ortadan kaldırmak için without ALL kullanır SELECT ve kaynak tablodan yalnızca çoğaltılmamış satırları döndürür.

Üçüncü örnek, ilk ve parantezleri kullanmayan ikincisini ALL kapsayan ile kullanır UNIONUNION.ALL İkincisi UNION , parantez içinde olduğundan önce işlenir. Seçenek kullanılmadığından ve yinelenenler kaldırıldığından tablodan ALL yalnızca yinelenenleri kaldırılmış satırları döndürür. Bu satırlar, anahtar sözcükler kullanılarak SELECT birincinin UNION ALL sonuçlarıyla birleştirilir. Bu örnek, iki küme arasındaki yinelemeleri kaldırmaz.

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

Ayrıca Bkz.

SEÇ (Transact-SQL)
SELECT Örnekleri (Transact-SQL)