Birliği (Transact-sql)
İki veya daha çok sorgu sonuçlarını tüm sorguları Birliği ait tüm satırları içeren tek bir sonuç kümesi birleştirir. UNION işlemi iki tablodaki sütunları birleştirmek birleşimler kullanma--dan farklı.
UNION kullanarak iki sorgu sonuç kümeleri birleştirme temel kuralları şunlardır:
Numarası ve sütunların sırasını tüm sorgular aynı olmalıdır.
Veri türleri uyumlu olmalıdır.
Transact-SQL Sözdizim Kuralları
Sözdizimi
{ <query_specification> | ( <query_expression> ) }
UNION [ ALL ]
<query_specification | ( <query_expression> )
[ UNION [ ALL ] <query_specification> | ( <query_expression> )
[ ...n ] ]
Bağımsız değişkenler
<query_specification> | (<query_expression>)
Bir sorgu belirtimi veya başka bir sorgu belirtimi veya sorgu ifadesi alınan verilerle birlikte veri döndüren sorgu ifadesi olduğunu. Bir birleşim işlemi bir parçası olan sütun tanımları aynı olması gerekmez, ancak örtük dönüştürme ile uyumlu olması gerekir. Veri türleri farklıysa elde edilen veri türü için olan kurallara göre belirlenir veri türü önceliği. Aynı ama duyarlık, ölçek veya uzunluğu farklı türleri vardır, sonuç ifadeler birleştirme aynı kurallara göre belirlenir. Daha fazla bilgi için, bkz. Duyarlık, ölçek ve uzunluk (Transact-sql).Sütun xmlveri türüne eşdeğer olmalı. Tüm sütunları ya da yazılan bir xml Şeması veya gerekir türlenmemiş. Yazdıysanız aynı xml şema koleksiyonu için yazılmalıdır.
UNION
Birden çok sonuç kümeleri kombine ve tek bir sonuç kümesi döndürülen belirtir.ALL
Tüm satırların sonuçlara içermektedir. Bu yinelemeler içerir. Aksi takdirde belirtilen, yinelenen satırları kaldırıldı.
Örnekler
A.Bir UNION kullanma
Aşağıdaki örnek, sonuç kümesi içeriğini içerir ProductModelIDve Namesütunlar her iki ProductModelve Glovestabloları.
USE AdventureWorks2012;
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
-- Here is the simple union.
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
B.INTO UNION ile kullanma
Aşağıdaki örnekte, INTOikinci fıkrada SELECTadlı bu deyimi belirtir ProductResultsbelirlenmiş sütunları Birliği nihai sonuç kümesi tutan ProductModelve Glovestabloları. Not Glovesilk olarak oluşturulan tablonun SELECTdeyimi.
USE AdventureWorks2012;
GO
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
USE AdventureWorks2012;
GO
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 deyimleri UNION kullanma
BİRLEŞİM yan tümcesi ile belirli parametreleri sırası önemlidir. Aşağıdaki örnek, yanlış ve doğru kullanımını gösterir UNIONiki SELECTdeyimleri sütun olan çıkışı yeniden adlandırılması.
USE AdventureWorks2012;
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
/* INCORRECT */
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
ORDER BY Name
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO
/* CORRECT */
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
D.select deyimleri UNION all etkilerini ve parantez göstermek için kullanma
Aşağıdaki örnekler UNIONüç tablo, hepsinde aynı 5 satır veri sonuçlarını birleştirmek için. İlk örnek UNION ALLmükerrer göstermek için kaydeder ve tüm 15 satır döndüren. İkinci örnek kullanır UNIONolmadan ALLüç kombine sonuçlarından yinelenen satırları ortadan kaldırmak için SELECTdeyimleri ve döner 5 satır.
Üçüncü örnek kullanır ALLile ilk UNIONve ikinci parantez içine UNIONkullandığı değil ALL. İkinci UNIONo parantez içinde ve 5 satırları çünkü verir çünkü ilk önce işleneceği ALLseçenek kullanılmaz ve çoğaltmaları kaldırılır. Bu 5 satır ilk sonuçları ile birlikte SELECTkullanarak UNION ALLanahtar. Bu 5 satır iki takım arasındaki çoğaltmaları kaldırmaz. Nihai sonucu 10 satır vardır.
USE AdventureWorks2012;
GO
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