Aracılığıyla paylaş


BİRLİĞİ (Transact-SQL)

İki veya daha fazla sorgulama sonuçlar Birliği'ndeki tüm sorgulara ait tüm satırları içeren bir tek sonuç kümesi birleştirir.BİRLEŞİM işlemi, iki tablodaki sütunları birleştirmek birleşimler kullanarak farklıdır.

UNION kullanarak iki sorgu sonuç kümelerini birleştirmek temel kuralları şunlardır:

  • Tüm sorgular aynı sıra ve sütun olması gerekir.

  • Veri türleri uyumlu olmalıdır.

Konu bağlantısı simgesiTransact-SQL sözdizimi 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> )
    Sorgu belirtimi veya başka bir sorgu belirtimi veya sorgu ifadealınan verilerle birleştirilecek verileri döndürür sorgu ifade değil.UNION işleminin bir parçası olan sütun tanımları aynı olması gerekmez, ancak örtük dönüştürme ile uyumlu olmalıdır.Farklı veri türleri, veri türünü kurallarına göre belirlenir veri türü önceliği.Türleri aynı duyarlık, ölçek veya uzunluğu ancak farklı olduğunda sonuç ifadeler birleştirme aynı kurallara göre belirlenir.Daha fazla bilgi için, bkz. Duyarlık, ölçek ve uzunluk (Transact-SQL).

    Sütunlarından xml veri türü olmalıdır eşdeğer.Tüm sütunları ya da yazılan bir xml Şeması veya gerekir türlenmemiş.Yazdıysanız, aynı xml şema koleksiyonyazılmalıdır.

  • BİRLİĞİ
    Birden çok sonuç kümeleri birleştirilir ve bir tek sonuç kümesiolarak döndürülen belirtir.

  • ALL
    Tüm satırlar sonuçlariçerir.Bu yinelemeler içerir.Aksi takdirde belirtilen, yinelenen satırları kaldırıldı.

Örnekler

A.Basit bir UNION kullanma

Aşağıdaki örnekte, sonuç kümesi içeriğini içerir ProductModelID ve Name sütunlar her ikisinin de ProductModel ve Gloves tablolar.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
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.select INTO UNION ile kullanma

Aşağıdaki örnekte, INTO yan tümce tümcesinde ikinci SELECT deyim belirtir tablo adlı ProductResults Son sonuç kümesi , belirlenmiş sütunları Birliği tutan ProductModel ve Gloves tablolar.Unutmayın Glovesilktablo oluşturulan SELECTdeyim.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
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 * 
FROM dbo.ProductResults;

C.order by ile iki select deyimleri UNION kullanma

Sırası ile birleşim yan tümce kullanılan belirli parametreler büyük/küçük harf önemlidir.Aşağıdaki örnek, yanlış ve doğru kullanımını gösterir UNION iki SELECT ifadeleri, bir sütun için iş yeniden adlandırılmasını çıktı.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
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.TÜM etkilerini ve parantez göstermek için üç select deyimleri UNION kullanma

Aşağıdaki örnekler UNION üç tablo tüm olduğundan aynı 5 satır veri sonuçlar birleştirmek içinİlk örnek UNION ALL Çoğaltılmış göstermek için kaydeden ve tüm 15 satır var. verirİkinci örnek kullanır UNION olmadan ALL üç birleştirilmiş sonuçlar arasında yinelenen satırları ortadan kaldırmak için SELECT , ifadeler ve döndürür 5 satır.

Üçüncü örnek kullanır ALL ile ilk UNION ve parantez içine ikinci UNION değil kullanıyor ALL.İkinci UNION parantez içinde olduğu ve 5, çünkü satırları döndürür çünkü ilk önce işleneceği ALL seçeneği kullanılamıyor ve eyaletler kaldırıldı.Bu 5 satır sonuçlar ilk birleştirilir SELECT kullanarak UNION ALL anahtar sözcükler.Bu iki 5 satır kümesi arasındaki çoğaltmaları kaldırmaz.Nihai sonucu 10 satır vardır.

USE AdventureWorks2008R2;
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