Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Zřetězí výsledky dvou dotazů do jedné sady výsledků. Určujete, jestli sada výsledků obsahuje duplicitní řádky:
- UNION ALL – obsahuje duplicitní položky.
- UNION – vyloučí duplicity.
Operace UNION se liší od operace JOIN:
- Union zřetězí sady výsledků ze dvou dotazů. Union ale nevytvoří jednotlivé řádky ze sloupců shromážděných ze dvou tabulek.
- Funkce JOIN porovnává sloupce ze dvou tabulek a vytváří výsledné řádky složené ze sloupců ze dvou tabulek.
Následují základní pravidla pro kombinování sad výsledků dvou dotazů pomocí funkce UNION:
Číslo a pořadí sloupců musí být ve všech dotazech stejné.
Datové typy musí být kompatibilní.
Syntax
{ <query_specification> | ( <query_expression> ) }
{ UNION [ ALL ]
{ <query_specification> | ( <query_expression> ) }
[ ...n ] }
Arguments
< > query_specification | ( <query_expression> ) Je specifikace dotazu nebo výraz dotazu, který vrací data, která se mají kombinovat s daty z jiné specifikace dotazu nebo výrazu dotazu. Definice sloupců, které jsou součástí operace UNION, nemusí být stejné, ale musí být kompatibilní prostřednictvím implicitního převodu. Pokud se datové typy liší, je výsledný datový typ určen na základě pravidel pro prioritu datového typu. Pokud jsou typy stejné, ale liší se v přesnosti, měřítku nebo délce, výsledek je založený na stejných pravidlech pro kombinování výrazů. Další informace naleznete v tématu Přesnost, Měřítko a Délka (Transact-SQL).
Sloupce datového typu XML se musí shodovat. Všechny sloupce musí být buď zadané do schématu XML, nebo netypované. Pokud jsou zadány, musí být zadány do stejné kolekce schémat XML.
UNION
Určuje, že se má zkombinovat několik sad výsledků a vrátit jako jednu sadu výsledků.
ALL
Začlení všechny řádky do výsledků včetně duplicit. Pokud není zadáno, odeberou se duplicitní řádky.
Examples
A. Použití jednoduché funkce UNION
V následujícím příkladu sada výsledků obsahuje obsah ProductModelID a Name sloupce tabulek ProductModel i Gloves tabulek.
-- 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. Použití příkazu SELECT INTO se sjednocením
V následujícím příkladu INTO klauzule ve druhém SELECT příkazu určuje, že tabulka s názvem ProductResults obsahuje konečnou sadu výsledků sjednocení vybraných sloupců ProductModel a Gloves tabulek. Tabulka Gloves se vytvoří v prvním SELECT příkazu.
-- 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. Použití funkce UNION dvou příkazů SELECT s ORDER BY
Pořadí určitých parametrů použitých s klauzulí UNION je důležité. Následující příklad ukazuje nesprávné a správné použití UNION ve dvou SELECT příkazech, ve kterých má být sloupec přejmenován ve výstupu.
-- 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. Použití funkce UNION ze tří příkazů SELECT k zobrazení účinků ALL a závorek
Následující příklady slouží UNION ke kombinování výsledků tří tabulek, které mají všechny stejné 5 řádků dat. První příklad používá UNION ALL k zobrazení duplicitních záznamů a vrátí všech 15 řádků. Druhý příklad používá UNION bez ALL odstranění duplicitních řádků z kombinovaných výsledků tří SELECT příkazů a vrátí 5 řádků.
Třetí příklad používá ALL první UNION a závorky uzavře druhou UNION , která nepoužívá ALL. Druhá UNION se zpracuje jako první, protože je v závorkách, a vrátí 5 řádků, protože ALL se tato možnost nepoužívá a duplicity se odeberou. Tyto 5 řádků se zkombinují s výsledky prvního SELECT pomocí UNION ALL klíčových slov. Tento příklad neodebere duplicity mezi dvěma sadami pěti řádků. Konečný výsledek má 10 řádků.
-- 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
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
E. Použití jednoduché funkce UNION
V následujícím příkladu sada výsledků obsahuje obsah CustomerKey sloupců obou FactInternetSales tabulek i DimCustomer tabulek. Vzhledem k tomu, že se klíčové slovo ALL nepoužívá, jsou z výsledků vyloučeny duplicity.
-- Uses AdventureWorks
SELECT CustomerKey
FROM FactInternetSales
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
F. Použití funkce UNION dvou příkazů SELECT s ORDER BY
Pokud jakýkoli příkaz SELECT v příkazu UNION obsahuje klauzuli ORDER BY, měla by být tato klauzule umístěna za všechny příkazy SELECT. Následující příklad ukazuje nesprávné a správné použití UNION ve dvou SELECT příkazech, ve kterých je sloupec seřazen s 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. Použití union dvou příkazů SELECT s WHERE a ORDER BY
Následující příklad ukazuje nesprávné a správné použití UNION ve dvou SELECT příkazech, kde where WHERE a ORDER BY jsou potřeba.
-- 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. Použití funkce UNION tří příkazů SELECT k zobrazení efektů ALL a závorek
Následující příklady slouží UNION ke kombinování výsledků stejné tabulky , aby demonstrovaly účinky ALL a závorky při použití UNION.
První příklad používá UNION ALL k zobrazení duplicitních záznamů a třikrát vrátí každý řádek ve zdrojové tabulce. Druhý příklad používá UNION bez ALL odstranění duplicitních řádků z kombinovaných výsledků tří SELECT příkazů a vrátí pouze nadbytečné řádky ze zdrojové tabulky.
Třetí příklad používá ALL první UNION a závorky ohraničující sekundu UNION , která nepoužívá ALL. Druhá UNION se zpracuje jako první, protože je v závorkách. Vrátí pouze nadbytečné řádky z tabulky, protože ALL možnost se nepoužívá a duplicitní položky se odeberou. Tyto řádky jsou kombinovány s výsledky první SELECT pomocí UNION ALL klíčových slov. Tento příklad neodebere duplicity mezi těmito dvěma sadami.
-- 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
);
Viz také
SELECT (Transact-SQL)
Příklady SELECT (Transact-SQL)