Partager via


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 exemple

    TABLE3

     

     

    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