Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric (wersja zapoznawcza)
Łączy wyniki dwóch zapytań w jeden zestaw wyników. Określasz, czy zestaw wyników zawiera zduplikowane wiersze:
- UNION ALL — zawiera duplikaty.
- UNION — wyklucza duplikaty.
Operacja UNION różni się od operacji JOIN:
- Unia łączy zestawy wyników z dwóch zapytań. Jednak unia nie tworzy pojedynczych wierszy z kolumn zebranych z dwóch tabel.
- Funkcja JOIN porównuje kolumny z dwóch tabel, aby utworzyć wiersze wyników składające się z kolumn z dwóch tabel.
Poniżej przedstawiono podstawowe reguły łączenia zestawów wyników dwóch zapytań przy użyciu funkcji UNION:
Liczba i kolejność kolumn muszą być takie same we wszystkich zapytaniach.
Typy danych muszą być zgodne.
Transact-SQL konwencje składni
Syntax
{ <query_specification> | ( <query_expression> ) }
{ UNION [ ALL ]
{ <query_specification> | ( <query_expression> ) }
[ ...n ] }
Arguments
< > query_specification | ( <query_expression> ) To specyfikacja zapytania lub wyrażenie zapytania, które zwraca dane do połączenia z danymi z innej specyfikacji zapytania lub wyrażenia zapytania. Definicje kolumn, które są częścią operacji UNION, nie muszą być takie same, ale muszą być zgodne z niejawną konwersją. Gdy typy danych różnią się, wynikowy typ danych jest określany na podstawie reguł pierwszeństwa typu danych. Gdy typy są takie same, ale różnią się dokładnością, skalą lub długością, wynik jest oparty na tych samych regułach łączenia wyrażeń. Aby uzyskać więcej informacji, zobacz Precyzja, Skalowanie i Długość (Transact-SQL).
Kolumny typu danych XML muszą być równe. Wszystkie kolumny muszą być wpisywane do schematu XML lub nietypowe. W przypadku wpisywania muszą one być wpisywane do tej samej kolekcji schematów XML.
UNION
Określa, że wiele zestawów wyników ma być połączonych i zwracanych jako pojedynczy zestaw wyników.
ALL
Dołącza wszystkie wiersze do wyników, w tym duplikaty. Jeśli nie zostanie określony, zduplikowane wiersze zostaną usunięte.
Examples
A. Korzystanie z prostej unii
W poniższym przykładzie zestaw wyników zawiera zawartość ProductModelID
kolumn i tabel ProductModel
i Name
Gloves
.
-- 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. Używanie funkcji SELECT INTO z UNIĄ
W poniższym przykładzie klauzula INTO
w drugiej SELECT
instrukcji określa, że tabela o nazwie ProductResults
zawiera końcowy zestaw wyników unii wybranych kolumn ProductModel
tabel i Gloves
. Tabela jest tworzona Gloves
w pierwszej SELECT
instrukcji.
-- 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. Używanie instrukcji UNION dwóch instrukcji SELECT z instrukcjami ORDER BY
Kolejność niektórych parametrów używanych w klauzuli UNION jest ważna. W poniższym przykładzie pokazano niepoprawne i poprawne użycie UNION
w dwóch SELECT
instrukcjach, w których nazwa kolumny ma zostać zmieniona w danych wyjściowych.
-- 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. Używanie instrukcji UNION z trzech instrukcji SELECT w celu pokazania efektów funkcji ALL i nawiasów
W poniższych przykładach użyto UNION
metody , aby połączyć wyniki trzech tabel, które mają te same 5 wierszy danych. W pierwszym przykładzie użyto UNION ALL
polecenia , aby wyświetlić zduplikowane rekordy i zwraca wszystkie 15 wierszy. W drugim przykładzie użyto UNION
polecenia bez ALL
, aby wyeliminować zduplikowane wiersze z połączonych wyników trzech SELECT
instrukcji i zwraca 5 wierszy.
W trzecim przykładzie użyto ALL
elementu z pierwszym UNION
i nawiasami ujętą w drugą UNION
, która nie używa elementu ALL
. Drugi UNION
jest przetwarzany jako pierwszy, ponieważ znajduje się w nawiasach i zwraca 5 wierszy, ponieważ ALL
opcja nie jest używana, a duplikaty są usuwane. Te 5 wierszy są łączone z wynikami pierwszego SELECT
przy użyciu UNION ALL
słów kluczowych. W tym przykładzie nie są usuwane duplikaty między dwoma zestawami pięciu wierszy. Wynik końcowy zawiera 10 wierszy.
-- 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
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Korzystanie z prostej unii
W poniższym przykładzie zestaw wyników zawiera zawartość CustomerKey
kolumn tabel FactInternetSales
i DimCustomer
. Ponieważ słowo kluczowe ALL nie jest używane, duplikaty są wykluczone z wyników.
-- Uses AdventureWorks
SELECT CustomerKey
FROM FactInternetSales
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
F. Używanie instrukcji UNION dwóch instrukcji SELECT z instrukcjami ORDER BY
Jeśli dowolna instrukcja SELECT w instrukcji UNION zawiera klauzulę ORDER BY, ta klauzula powinna zostać umieszczona po wszystkich instrukcjach SELECT. W poniższym przykładzie pokazano niepoprawne i poprawne użycie UNION
w dwóch SELECT
instrukcjach, w których kolumna jest uporządkowana za pomocą funkcji 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. Używanie instrukcji UNION dwóch instrukcji SELECT z instrukcjami WHERE i ORDER BY
W poniższym przykładzie pokazano niepoprawne i poprawne użycie UNION
w dwóch SELECT
instrukcjach, w których potrzebne są instrukcje WHERE i ORDER BY.
-- 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. Używanie instrukcji UNION z trzech instrukcji SELECT w celu pokazania efektów wszystkich i nawiasów
W poniższych przykładach użyto UNION
metody , aby połączyć wyniki tej samej tabeli w celu zademonstrowania efektów funkcji ALL i nawiasów podczas korzystania z elementu UNION
.
W pierwszym przykładzie użyto UNION ALL
polecenia , aby wyświetlić zduplikowane rekordy i zwrócić każdy wiersz w tabeli źródłowej trzy razy. W drugim przykładzie użyto UNION
polecenia bez ALL
, aby wyeliminować zduplikowane wiersze z połączonych wyników trzech SELECT
instrukcji i zwracać tylko niezduplikowane wiersze z tabeli źródłowej.
W trzecim przykładzie użyto ALL
pierwszego UNION
i nawiasu otaczającego drugą UNION
, która nie używa elementu ALL
. Drugi UNION
jest przetwarzany jako pierwszy, ponieważ znajduje się w nawiasach. Zwraca tylko niezreplikowane wiersze z tabeli, ponieważ ALL
opcja nie jest używana, a duplikaty są usuwane. Te wiersze są łączone z wynikami pierwszego SELECT
przy użyciu UNION ALL
słów kluczowych. W tym przykładzie nie są usuwane duplikaty między dwoma zestawami.
-- 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
);