Combinando conjuntos de resultados com UNION
O operador UNION permite que você combine os resultados de duas ou mais instruções SELECT em um único conjunto de resultados. Os conjuntos de resultados que são combinados usando-se UNION devem todos ter a mesma estrutura. Eles devem ter o mesmo número de colunas e as colunas de conjuntos de resultados correspondentes devem ter os tipos de dados compatíveis. Para obter mais informações, consulte Diretrizes para usar Union.
UNION é especificado como:
select_statement UNION [ALL] select_statement
Por exemplo, Table1 e Table2 têm a mesma estrutura de duas colunas.
TABLE1 |
|
|
TABLE2 |
|
COLUMNA |
COLUMNB |
|
COLUMNC |
COLUMND |
CHAR(4) |
INT |
|
CHAR(4) |
INT |
------- |
--- |
|
------- |
--- |
ABC |
1 |
|
GHI |
3 |
DEF |
2 |
|
JKL |
4 |
GHI |
3 |
|
MNO |
5 |
Esta consulta cria um UNION entre as tabelas:
SELECT * FROM Table1
UNION
SELECT * FROM Table2
Aqui está o conjunto de resultados:
ColumnA ColumnB
------- --------
abc 1
def 2
ghi 3
jkl 4
mno 5
Os nomes de coluna no conjunto de resultados de UNION são os mesmos dos nomes de coluna no conjunto de resultados da primeira instrução SELECT de UNION. Os nomes de coluna do conjunto de resultados das outras instruções são ignorados.
Por padrão, o operador UNION remove linhas duplicadas dos conjuntos de resultados. Se você usar ALL, todas as linhas serão incluídas nos resultados e as duplicatas não são removidas.
Os resultados exatos de uma operação de UNION dependem do agrupamento escolhido durante a instalação e da cláusula ORDER BY. Para obter mais informações sobre os efeitos de diferentes agrupamentos, consulte Trabalhando com agrupamentos.
Qualquer número de operadores UNION pode aparecer em uma instrução Transact-SQL. Por exemplo:
SELECT * FROM TableA
UNION
SELECT * FROM TableB
UNION
SELECT * FROM TableC
UNION
SELECT * FROM TableD
Por padrão, o SQL Server 2005 avalia uma instrução da que contenha operadores UNION da esquerda para a direita. Use parênteses para especificar a ordem de avaliação. Por exemplo, as instruções seguintes não são equivalentes:
/* 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
Comentários
Na primeira instrução, as duplicatas são eliminadas na união entre a TableB e TableC. Na união entre esse conjunto e TableA, as duplicatas não são eliminadas. Na segunda instrução , as duplicatas são inclusas na união entre TableA e TableB, mas são eliminadas na união subseqüente com TableC. ALL não tem nenhum efeito no resultado final desta expressão.
Quando UNION for usado, as instruções SELECT individuais não poderão ter suas próprias cláusulas ORDER BY ou COMPUTE. Só poderá haver uma cláusula ORDER BY ou COMPUTE após a última instrução SELECT, ela é aplicada ao conjunto de resultados combinados final. GROUP BY e HAVING podem ser especificados apenas nas instruções SELECT individuais.
Consulte também