Instructions pour l'utilisation de l'opérateur UNION
Suivez les recommandations ci-dessous lorsque vous utilisez l'opérateur UNION :
Toutes les listes de sélection figurant dans une instruction UNION doivent contenir le même nombre d'expressions (noms de colonne, expressions arithmétiques, fonctions d'agrégation, etc.).
Les colonnes correspondantes des jeux de résultats, combinées avec UNION, ou tout sous-ensemble de colonnes utilisé dans des requêtes individuelles, doivent avoir le même type de données, permettre une conversion de données implicite entre les deux types de données ou faire l'objet d'une conversion explicite. Par exemple, une opération UNION n'est possible entre une colonne de type datetime et une autre de type binary que si une conversion explicite est fournie. En revanche, une opération UNION est possible entre une colonne de type money et une autre de type int car ces deux types de données peuvent être convertis implicitement.
Les colonnes de type de donnéesxml doivent être équivalentes. Toutes les colonnes doivent être soit typées d'après un schéma XML, soit non typées. Si elles sont typées, elles doivent l'être selon la même collection de schéma XML.Les colonnes correspondantes des jeux de résultats dans les instructions individuelles combinées avec UNION doivent se présenter dans le même ordre. En effet, UNION compare les colonnes une à une en respectant l'ordre adopté dans les requêtes individuelles.
Ceci est un exempleTABLE3
TABLE4
A
B
C
A
B
INT
CHAR(4)
CHAR(4)
CHAR(4)
FLOAT
---
-------
-------
-------
-------
1
ABC
JKL
JKL
1.000
2
DEF
MNO
MNO
5.000
3
GHI
PQR
Exécutez la requête suivante :
SELECT a, b FROM table3 UNION SELECT b, a FROM table4
Voici le jeu de résultats obtenu :
a b -------- ----- 1.000000 abc 2.000000 def 3.000000 ghi 1.000000 jkl 5.000000 mno
Lorsque différents types de données sont combinés par une opération UNION, ils sont convertis selon les règles de priorité des types de données. Dans l'exemple précédent, les valeurs int sont converties en float, parce que float a un degré de priorité supérieur à int. Pour plus d'informations, consultez Priorités des types de données (Transact-SQL).
La requête suivante génère un message d'erreur parce que les types de données des colonnes correspondantes ne sont pas compatibles :SELECT b, c FROM table3 UNION SELECT a, b FROM table4
Les noms de colonne utilisés dans la table qui résultent d'une opération UNION proviennent de la première requête individuelle de l'instruction UNION. Pour désigner une colonne du jeu de résultats par un nouveau nom (par exemple dans une clause ORDER BY), il faut y faire référence sous ce nom dans la première instruction SELECT :
SELECT city AS Cities FROM stores_west UNION SELECT city FROM stores_east ORDER BY city
Voir aussi
Concepts
Combinaison d'ensembles de résultats avec UNION
Utilisation de UNION, EXCEPT et INTERSECT avec d'autres instructions Transact-SQL