Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Operador UNION
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's](http://forum.imasters.com.br/index.php?showtopic=224866) que 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 nome
Resultado, observe que Vito Corleone aparece apenas uma única vez:
>
nome
------------------------------
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
OBS:
AUTOR: "eriva_br"
Dúvidas, criticas, contribuições, correções e adições seram bem vindas.
> Olá gostaria gostaria de saber como eu vejo no resultado da busca por union a tabela que é o registro para eu poder fazer um update ou acessar o cadastro.Obrigado
de forma automática não conheço, mas tu pode criar manualmente um campo de origem para posterior identificação, exemplo:select 'tabela de Cliente' as origem, nome from @tbClientes union select 'tabela de Fornecedores' as origem, nome from @tbFornecedores order by nome>
> Olá gostaria gostaria de saber como eu vejo no resultado da busca por union a tabela que é o registro para eu poder fazer um update ou acessar o cadastro.Obrigado
de forma automática não conheço, mas tu pode criar manualmente um campo de origem para posterior identificação, exemplo:select 'tabela de Cliente' as origem, nome from @tbClientes union select 'tabela de Fornecedores' as origem, nome from @tbFornecedores order by nome
Valeu cara e eu estava pensando nessa lógica por ser uma tabela virtual, mas ai eu tinha colocado tabela_de_cliente as origem e por já estar meio cansado nao coloquei entre aspas por isso nao deu certo.Valeu ai
Olá gostaria gostaria de saber como eu vejo no resultado da busca por union a tabela que é o registro para eu poder fazer um update ou acessar o cadastro.Obrigado