none
UNION / IN RRS feed

  • Pergunta

  • eu estava acompanhando um topico("Order by com union") aqui do forum sobre UNION e me deu uma dúvida....

    seu eu fizer

    select * from tabela where codint = 60
    union
    select * from tabela where codint = 100

    não é o mesmo que

    select * from tabela where codint  in (60,100)

    eu fiz um teste aqui e o resultado foi o mesmo....
    terça-feira, 8 de abril de 2008 15:10

Respostas

  • UNION

    Você possui 2 tabelas (VendasExternas e VendasInternas) e deseja fazer um resumo de todas as vendas de um vendedor chamado MSDN

    SELECT Nome, Valor FROM VendasExternas
    WHERE Nome = 'Marcos'
    UNION ALL
    SELECT Nome, Valor FROM VendasInternas
    WHERE Nome = 'Marcos'

    IN

    Quando o valor do filtro é uma lista de valores

    SELECT Nome FROM
    VendasExternas WHERE IDVendedor in (1, 2, 3,4)
    SELECT Nome FROM VendasExternas WHERE IDVendedor in (SELECT IDVendedor FROM VendasInternas WHERE Estado = 'RJ')



    terça-feira, 8 de abril de 2008 15:34
  • Boa Tarde,

     

    A grosso modo o IN só poderá referenciar-se a um tabela (WHERE Algo IN (AlgumaCoisa)) enquanto o UNION permite combinar resultsets de tabelas diferentes. Sempre que uma solução puder ser resolvido com UNION e com IN opte pelo IN. Ele é sem dúvida mais performático.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de abril de 2008 16:16

Todas as Respostas

  • Geovani,

    O seu exemplo está correto! Neste caso não é necessário efetuar um UNION.


    terça-feira, 8 de abril de 2008 15:17
  • quando usar o UNION ou o IN???
    terça-feira, 8 de abril de 2008 15:22
  • UNION

    Você possui 2 tabelas (VendasExternas e VendasInternas) e deseja fazer um resumo de todas as vendas de um vendedor chamado MSDN

    SELECT Nome, Valor FROM VendasExternas
    WHERE Nome = 'Marcos'
    UNION ALL
    SELECT Nome, Valor FROM VendasInternas
    WHERE Nome = 'Marcos'

    IN

    Quando o valor do filtro é uma lista de valores

    SELECT Nome FROM
    VendasExternas WHERE IDVendedor in (1, 2, 3,4)
    SELECT Nome FROM VendasExternas WHERE IDVendedor in (SELECT IDVendedor FROM VendasInternas WHERE Estado = 'RJ')



    terça-feira, 8 de abril de 2008 15:34
  • entendi.....

    obrigado
    terça-feira, 8 de abril de 2008 15:36
  • Boa Tarde,

     

    A grosso modo o IN só poderá referenciar-se a um tabela (WHERE Algo IN (AlgumaCoisa)) enquanto o UNION permite combinar resultsets de tabelas diferentes. Sempre que uma solução puder ser resolvido com UNION e com IN opte pelo IN. Ele é sem dúvida mais performático.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de abril de 2008 16:16
  • Boa Gustavo sem duvida é melhor usar o IN, complementando...

     

    Vale a pena lembrar do "UNION ALL" que no seu caso poderia ser muito bem aplicado, em relação a performance ele será bem melhor que o UNION já que uma operação UNION gera obriga o SQL a fazer um distinct dos resultados para mostrar apenas os dados que não repetem, já o UNION ALL apenas concatena(junta) os dados que são retornados das duas consultas sendo assim uma operação bem mais simples já que ele não tem que ordenar a tabela para faze o distinct ou merge.

     

     

    terça-feira, 8 de abril de 2008 17:12