Finalidade do Union

MySQL

25/01/2013

Olá galera,

podem me ajudar com uma questão,

Qual a finalidade do union ?
Gustavo Fernandes

Gustavo Fernandes

Curtidas 0

Respostas

Bruno Leandro

Bruno Leandro

25/01/2013

a finalidade é unir dois select com os mesmo campos mas que tenham condições diferentes, porque segundo os dba usar or deixar os selects lentos. existem outros casos tambem. por exemplo voce quer listar todos os clientes e suas compras, e caso um cliente nao tenha compra voce quer retornar um registro com valores especificos

Ex

select codigo,nome from tabela where data > 1900-01-01 and data < 2000-12-31
union
select codigo,nome from tabela where data = 2012-12-31


select codigo,nome,sum(valor_compra) from vendas
union
select codigo,nome,0 from clientes
where not exists( select codigo from vendas where vendas.codigo_cliente = clientes.codigo_cliente)
GOSTEI 0
Danilo Gomes

Danilo Gomes

25/01/2013

Então, cara, a ideia é essa apresentada na primeira resposta mesmo.

Não sei se você quis entender o "sentido" disso.

Muitas vezes temos que recuperar informações que, para determinada área do sistema, possuem o mesmo sentido lógico.
Contudo, no banco de dados, possuem origens diferentes.

Já tive, por exemplo, que pegar lançamentos bancários de origens distintas, tabelas distintas e estruturas distintas.
Mas para aquele relatório, não fazia diferença de onde era.

Muitas vezes, trabalhar com union, teoria dos conjuntos, é bem mais simples e intuitivo que trabalhar com uma série de joins complexos.
GOSTEI 0
Gustavo Fernandes

Gustavo Fernandes

25/01/2013

Bruno,

muito boa sua explicação só mais uma pergunta.

No select que demonstro os atributos que

tenho no primeiro select, também tenho que ter os mesmos no segundo ?
GOSTEI 0
Danilo Gomes

Danilo Gomes

25/01/2013

Não necessariamente os mesmos atributos, mas eles tem que ter tipos compatíveis.

Caso não tenham, pode fazer um cast em um dos selects, o importante é que ambos os retornos sejam compatíveis.
GOSTEI 0
Gustavo Fernandes

Gustavo Fernandes

25/01/2013

Hum...

entendi, obrigado pela atenção Midas.
GOSTEI 0
William

William

25/01/2013

Gus estou encerrando o tópico, qualquer outra dúvida poste novamente.
GOSTEI 0
POSTAR