união de query's, juntar, unir, atrelar, conectar, ligar, acoplar, vincular... várias queries em um único resultado, juntando o select num moido só...
Descrição:
Este operador possibilita a combinação de uma ou mais queries em um único resultado consistindo todas as linhas pertencentes a todas as querys neste união. Veja que isto é diferente de usar JOIN'sque combinam colunas de diferentes tabelas
Regras:
Duas regras básicas para o uso do UNION
- O número e a ordem das colunas deve ser identico em todas as queries
- O tipo de dados deve ser compativel, caso náo for, uma dica seria converter tudo pra varchar usando a função convert
Opções:
Temos a opção de definir a união total com UNION ALL ou somente a união simples com UNION, vejamos abaixo as diferenças:
- UNION: faz a união e já elimina linhas idênticas
- UNION ALL: faz a união e mantém as linhas idênticas
No exemplo abaixo veremos melhor esta a diferença.
Exemplo:
Vamos fazer a união das tabelas clientes e fornecedores, somente com o campo 'Nome', note que o registro "Vito Corleone" (ele mesmo Don Vito, o poderoso Chefão), aparece na tabela de clientes e fornecedores, logo em UNION ele vai aparecer uma única vez e em UNION ALL ele vai aparecer duas vezes.
tabelas para testes
--configurando para não aparecer o contador de registros executados set nocount on --declarando tabelas temporarias para teste declare @tbClientes table (cod int identity, nome varchar(30)) declare @tbFornecedores table (cod int identity, nome varchar(30)) --inserindo dados na tabela clientes insert into @tbClientes (nome) values ('Vito Corleone') insert into @tbClientes (nome) values ('Bonasera') insert into @tbClientes (nome) values ('Luca Brasi') --inserindo dados na tabela fornecedores insert into @tbFornecedores (nome) values ('Paul Vitti') insert into @tbFornecedores (nome) values ('Tonny Gordo') insert into @tbFornecedores (nome) values ('Vito Corleone')
.
.
.
.
UNION
--executando o UNION select nome from @tbClientes union select nome from @tbFornecedores order by nomeResultado, observe que Vito Corleone aparece apenas uma única vez:
nome
------------------------------
Bonasera
Luca Brasi
Paul Vitti
Tonny Gordo
Vito Corleone
------------------------------
Bonasera
Luca Brasi
Paul Vitti
Tonny Gordo
Vito Corleone
.
.
.
.
UNION ALL
--executando o UNION ALL select nome from @tbClientes union all select nome from @tbFornecedores order by nome
Resultado, observe que Vito Corleone aparece duas vezes:
nome
------------------------------
Bonasera
Luca Brasi
Paul Vitti
Tonny Gordo
Vito Corleone
Vito Corleone
------------------------------
Bonasera
Luca Brasi
Paul Vitti
Tonny Gordo
Vito Corleone
Vito Corleone
OBS:
- Para a ordenação o comando ORDER BY tem que ficar após o último SELECT
- No exemplo citado para as construções UNION foram usadas duas query's, mas poderiamos ter usado N query's
AUTOR: "eriva_br"
Dúvidas, criticas, contribuições, correções e adições seram bem vindas.