Opérateurs de jeu - UNION (Transact-SQL)Set Operators - UNION (Transact-SQL)

S’APPLIQUE À : OuiSQL Server OuiAzure SQL Database OuiAzure Synapse Analytics (SQL DW) OuiParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) YesParallel Data Warehouse

Concatène les résultats d’au moins deux requêtes en un seul jeu de résultats.Concatenates the results of two queries into a single result set. Vous contrôlez si le jeu de résultats contient des lignes en double :You control whether the result set includes duplicate rows:

  • UNION ALL - doublons compris.UNION ALL - Includes duplicates.
  • UNION - sauf les doublons.UNION - Excludes duplicates.

Une opération UNION est différente d’une opération JOIN  :A UNION operation is different from a JOIN:

  • Une opération UNION concatène les jeux de résultats de deux requêtes.A UNION concatenates result sets from two queries. Toutefois, une opération UNION ne crée pas de lignes individuelles à partir de colonnes collectées à partir de deux tables.But a UNION does not create individual rows from columns gathered from two tables.
  • Une opération JOIN compare des colonnes de deux tables pour créer des lignes de résultat composées de colonnes provenant de deux tables.A JOIN compares columns from two tables, to create result rows composed of columns from two tables.

Voici les règles de base pour combiner les jeux de résultats de deux requêtes à l’aide de la procédure UNION :The following are basic rules for combining the result sets of two queries by using UNION:

  • Le nombre et l'ordre des colonnes doivent être identiques dans toutes les requêtes.The number and the order of the columns must be the same in all queries.

  • Les types de données doivent être compatibles.The data types must be compatible.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

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

ArgumentsArguments

<query_specification> | ( <query_expression> ) Spécification ou expression de requête qui retourne les données à associer aux données d’une autre spécification ou expression de requête.<query_specification> | ( <query_expression> ) Is a query specification or query expression that returns data to be combined with the data from another query specification or query expression. Les définitions des colonnes faisant partie d'une opération UNION ne doivent pas forcément être identiques, mais elles doivent être compatibles via une conversion implicite.The definitions of the columns that are part of a UNION operation don't have to be the same, but they must be compatible through implicit conversion. Lorsque les types de données diffèrent, le type de données résultant est déterminé en fonction des règles de priorité des types de données.When data types differ, the resulting data type is determined based on the rules for data type precedence. Le résultat se détermine d'après les mêmes règles de combinaison d'expressions si les types sont les mêmes mais diffèrent en terme de précision, d'échelle ou de longueur.When the types are the same but differ in precision, scale, or length, the result is based on the same rules for combining expressions. Pour plus d’informations, consultez Précision, échelle et longueur (Transact-SQL).For more information, see Precision, Scale, and Length (Transact-SQL).

Les colonnes de type de données xml doivent être égales.Columns of the xml data type must be equal. Toutes les colonnes doivent être typées selon un schéma XML ou être non typées.All columns must be either typed to an XML schema or untyped. Si elles sont typées, elles doivent l'être par rapport à la même collection de schémas XML.If typed, they must be typed to the same XML schema collection.

UNIONUNION
Indique que les jeux de résultats multiples doivent être associés et retournés dans un seul jeu de résultats.Specifies that multiple result sets are to be combined and returned as a single result set.

ALLALL
Incorpore toutes les lignes dans les résultats, notamment les doublons.Incorporates all rows into the results, including duplicates. S'il n'est pas spécifié, tous les doublons de lignes sont supprimés.If not specified, duplicate rows are removed.

ExemplesExamples

R.A. Utilisation de l'opérateur UNION simpleUsing a simple UNION

Dans l'exemple suivant, le jeu de résultats comprend le contenu des colonnes ProductModelID et Name des deux tables ProductModel et Gloves.In the following example, the result set includes the contents of the ProductModelID and Name columns of both the ProductModel and Gloves tables.

-- 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.B. Utilisation de SELECT INTO avec UNIONUsing SELECT INTO with UNION

Dans l'exemple suivant, la clause INTO de la seconde instruction SELECT indique que la table nommée ProductResults contient le jeu de résultats final de l'union des colonnes sélectionnées des tables ProductModel et Gloves.In the following example, the INTO clause in the second SELECT statement specifies that the table named ProductResults holds the final result set of the union of the selected columns of the ProductModel and Gloves tables. La table Gloves est créée dans la première instruction SELECT.The Gloves table is created in the first SELECT statement.

-- 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.C. Utilisation de l'opérateur UNION dans deux instructions SELECT avec ORDER BYUsing UNION of two SELECT statements with ORDER BY

L'ordre de certains paramètres utilisés avec la clause UNION est important.The order of certain parameters used with the UNION clause is important. L'exemple suivant illustre l'utilisation incorrecte et correcte de UNION dans deux instructions SELECT où une colonne doit être renommée dans le résultat.The following example shows the incorrect and correct use of UNION in two SELECT statements in which a column is to be renamed in the output.

-- 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.D. Utilisation de l'opérateur UNION dans trois instructions SELECT pour illustrer les effets de ALL et des parenthèsesUsing UNION of three SELECT statements to show the effects of ALL and parentheses

Les exemples suivants utilisent UNION pour combiner les résultats de trois tables, ayant chacune les 5 lignes de données identiques.The following examples use UNION to combine the results of three tables that all have the same 5 rows of data. Le premier exemple utilise UNION ALL pour montrer les doublons d'enregistrement et retourne l'ensemble des 15 lignes.The first example uses UNION ALL to show the duplicated records, and returns all 15 rows. Le deuxième exemple utilise UNION sans ALL pour éliminer les doublons de ligne des résultats combinés des trois instructions SELECT et retourne 5 lignes.The second example uses UNION without ALL to eliminate the duplicate rows from the combined results of the three SELECT statements, and returns 5 rows.

Le troisième exemple utilise ALL avec la première clause UNION et met entre parenthèses la seconde clause UNION qui n'utilise pas ALL.The third example uses ALL with the first UNION and parentheses enclose the second UNION that isn't using ALL. La seconde clause UNION est traitée en premier, car elle est entre parenthèses. Elle retourne 5 lignes car l'option ALL n'est pas utilisée et les doublons sont supprimés.The second UNION is processed first because it's in parentheses, and returns 5 rows because the ALL option isn't used and the duplicates are removed. Ces 5 lignes sont combinées avec les résultats de la première instruction SELECT à l'aide des mots clés UNION ALL.These 5 rows are combined with the results of the first SELECT by using the UNION ALL keywords. Cet exemple ne supprime pas les doublons entre les deux ensembles de cinq lignes.This example doesn't remove the duplicates between the two sets of five rows. Le résultat final contient 10 lignes.The final result has 10 rows.

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

Exemples : Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) et Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse

E.E. Utilisation de l'opérateur UNION simpleUsing a simple UNION

Dans l’exemple suivant, le jeu de résultats comprend le contenu des colonnes CustomerKey des deux tables FactInternetSales et DimCustomer.In the following example, the result set includes the contents of the CustomerKey columns of both the FactInternetSales and DimCustomer tables. Étant donné que le mot clé ALL n’est pas utilisé, les doublons sont exclus des résultats.Since the ALL keyword isn't used, duplicates are excluded from the results.

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

F.F. Utilisation de l'opérateur UNION dans deux instructions SELECT avec ORDER BYUsing UNION of two SELECT statements with ORDER BY

Lorsqu’une instruction SELECT dans une instruction UNION comprend une clause ORDER BY, cette clause doit être placée après toutes les instructions SELECT.When any SELECT statement in a UNION statement includes an ORDER BY clause, that clause should be placed after all SELECT statements. L’exemple suivant illustre l’utilisation incorrecte et correcte de UNION dans deux instructions SELECT où une colonne doit être ordonnée avec ORDER BY.The following example shows the incorrect and correct use of UNION in two SELECT statements in which a column is ordered with 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.G. Utilisation de l’opérateur UNION dans deux instructions SELECT avec WHERE et ORDER BYUsing UNION of two SELECT statements with WHERE and ORDER BY

L’exemple suivant montre l’utilisation incorrecte et correcte de UNION dans deux instructions SELECT où WHERE et ORDER BY sont nécessaires.The following example shows the incorrect and correct use of UNION in two SELECT statements where WHERE and ORDER BY are needed.

-- 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.H. Utilisation de l’opérateur UNION dans trois instructions SELECT pour illustrer les effets de ALL et des parenthèsesUsing UNION of three SELECT statements to show effects of ALL and parentheses

Les exemples suivants utilisent UNION pour combiner les résultats de la même table afin d’illustrer les effets de ALL et des parenthèses lorsque vous utilisez UNION.The following examples use UNION to combine the results of the same table to demonstrate the effects of ALL and parentheses when using UNION.

Le premier exemple utilise UNION ALL pour afficher les enregistrements en double et retourne chaque ligne dans la table source trois fois.The first example uses UNION ALL to show duplicated records and returns each row in the source table three times. Le deuxième exemple utilise UNION sans ALL pour éliminer les doublons de ligne des résultats combinés des trois instructions SELECT et retourne uniquement les lignes qui ne sont pas en double de la table source.The second example uses UNION without ALL to eliminate the duplicate rows from the combined results of the three SELECT statements and returns only the unduplicated rows from the source table.

Le troisième exemple utilise ALL avec le premier opérateur UNION et des parenthèses autour du deuxième opérateur UNION qui n’utilise pas ALL.The third example uses ALL with the first UNION and parentheses enclosing the second UNION that isn't using ALL. Le deuxième opérateur UNION est traité en premier, car il est entre parenthèses.The second UNION is processed first because it is in parentheses. Il retourne uniquement les lignes de la table qui ne sont pas en double, car l’option ALL n’est pas utilisée et les doublons sont supprimés.It returns only the unduplicated rows from the table because the ALL option isn't used and duplicates are removed. Ces lignes sont combinées avec les résultats de la première instruction SELECT à l’aide des mots clés UNION ALL.These rows are combined with the results of the first SELECT by using the UNION ALL keywords. Cet exemple ne supprime pas les doublons entre les deux ensembles.This example doesn't remove the duplicates between the two sets.

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

Voir aussiSee Also

SELECT (Transact-SQL) SELECT (Transact-SQL)
Exemples SELECT (Transact-SQL)SELECT Examples (Transact-SQL)