Combinaison d'ensembles de résultats avec UNION

L'opérateur UNION vous permet de combiner les résultats de deux ou de plusieurs instructions SELECT en un seul ensemble de résultats. Les ensembles de résultats combinés à l'aide de UNION doivent tous avoir la même structure. Ils doivent posséder le même nombre de colonnes et les types de données des colonnes correspondantes de l'ensemble de résultats doivent être compatibles. Pour plus d'informations, consultez Instructions pour l'utilisation de l'opérateur UNION.

La syntaxe de l'opérateur UNION se présente ainsi :

select_statement UNION [ALL] select_statement

Par exemple, Table1 et Table2 ont la même structure à deux colonnes.

TABLE1

 

 

TABLE2

 

COLUMNA

COLUMNB

 

COLUMNC

COLUMND

CHAR(4)

INT

 

CHAR(4)

INT

-------

---

 

-------

---

ABC

  1

 

GHI

  3

DEF

  2

 

JKL

  4

GHI

  3

 

MNO

  5

La requête suivante crée une UNION entre les tables :

SELECT * FROM Table1
UNION
SELECT * FROM Table2

Voici l'ensemble de résultats obtenu :

ColumnA  ColumnB
-------  --------
abc      1
def      2
ghi      3
jkl      4
mno      5

Les noms des colonnes d'ensembles de résultats d'une UNION sont identiques à ceux des colonnes de l'ensemble de résultats de la première instruction SELECT de l'UNION. Les noms des colonnes d'ensembles de résultats des autres instructions SELECT sont ignorés.

Par défaut, l'opérateur UNION supprime les lignes en double de l'ensemble de résultats. Si vous employez l'option ALL, toutes les lignes apparaissent dans les résultats et les doublons ne sont pas supprimés.

L'exactitude des résultats d'une opération UNION dépend du classement choisi lors de l'installation, ainsi que de la clause ORDER BY. Pour plus d'informations sur les effets des différents classements, consultez Utilisation des classements.

Le nombre d'opérateurs UNION apparaissant dans une instruction Transact-SQL n'est pas limité. Par exemple :

SELECT * FROM TableA
UNION
SELECT * FROM TableB
UNION
SELECT * FROM TableC
UNION
SELECT * FROM TableD

Par défaut, SQL Server 2005 évalue une instruction contenant des opérateurs UNION de gauche à droite. Pour spécifier un ordre d'évaluation particulier, utilisez des parenthèses. Par exemple, les instructions SELECT suivantes ne sont pas équivalentes :

/* First statement. */
SELECT * FROM TableA
UNION ALL
(   SELECT * FROM TableB
   UNION
   SELECT * FROM TableC
)
GO

/* Second statement. */
(SELECT * FROM TableA
 UNION ALL
 SELECT * FROM TableB
)
UNION
SELECT * FROM TableC)
GO

Remarques

Dans la première instruction, les doublons sont éliminés lors de l'union de la TableB et de la TableC. Ils ne le sont pas dans l'union entre cet ensemble de résultats et la TableA. Dans la deuxième instruction, des doublons sont inclus dans l'union entre la TableA et la TableB, mais sont éliminés lors de l'union suivante avec la TableC. ALL n'a aucun impact sur le résultat final de cette expression.

Lorsque UNION est utilisé, les instructions SELECT individuelles ne peuvent pas comporter leurs propres clauses ORDER BY ou COMPUTE. Il ne peut exister qu'une seule clause ORDER BY ou COMPUTE après la dernière instruction SELECT : elle s'applique à l'ensemble de résultats combiné final. Les clauses GROUP BY et HAVING ne peuvent figurer que dans les instructions SELECT individuelles.