Diretrizes para usar Union

Siga estas diretrizes ao usar operadores UNION:

  • Todas as listas selecionadas nas instruções que estão sendo combinadas com UNION devem ter o mesmo número de expressões (nomes de coluna, expressões aritméticas, funções de agregação, e assim por diante).

  • Colunas correspondentes nos conjuntos de resultados que estão sendo combinadas com UNION ou qualquer subconjunto de colunas usado em consultas individuais devem ser do mesmo tipo de dados, ter uma possível conversão de dados implícita entre os dois tipos de dados ou ter uma conversão explícita fornecida. Por exemplo, um operador UNION entre uma coluna de tipo de dados datetime e um de tipo de dados binary não funcionará a menos que uma conversão explícita seja fornecida. Porém, um operador UNION funcionará entre uma coluna de tipo de dados money e um de tipo de dados int , porque eles podem ser convertidos implicitamente.

    Colunas do tipo de dados xml devem ser equivalentes. Todas as colunas ou devem ser ou não digitadas em um esquema XML. Se digitada, elas devem ser digitadas na mesma coleção de esquema XML.

  • Colunas de conjunto de resultados correspondentes nas instruções individuais que estão sendo combinadas com UNION devem ocorrer na mesma ordem, porque UNION compara as colunas uma a uma na ordem fornecida nas consultas individuais.

    Segue um exemplo.

    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

     

     

    Execute esta consulta:

    SELECT a, b FROM table3
    UNION 
    SELECT b, a FROM table4
    

    Segue um conjunto de resultados:

    a          b
    --------   -----
    1.000000   abc
    2.000000   def
    3.000000   ghi
    1.000000   jkl
    5.000000   mno
    

    Quando tipos de dados diferentes são combinados em uma operação UNION, eles são convertidos usando as regras de precedência de tipo de dados. No exemplo anterior, os valores int são convertidos em float, porque float tem precedência maior que int. Para mais informações, consulte Precedência de tipo de dados (Transact-SQL).

    Esta consulta gera uma mensagem de erro, porque os tipos de dados de colunas correspondentes não são compatíveis:

    SELECT b, c FROM table3
    UNION 
    SELECT a, b FROM table4
    
  • Os nomes de coluna na tabela resultante de UNION são tirados da primeira consulta individual na instrução UNION. Para consultar a uma coluna no conjunto de resultados por um nome novo (por exemplo, em uma cláusula ORDER BY), a coluna deve se referir àquele modo na primeira instrução SELECT:

    SELECT city AS Cities FROM stores_west
    UNION 
    SELECT city FROM stores_east
    ORDER BY city