T-Sql – Union | Except | Intersect

SQL Server 2005 introduz dois novos operadores em comunhão com o já famoso (e difamado) UNION. Estou falando de INTERSECT e de EXCEPT.

Para falar a verdade, sempre que escrevo querys tenho em mente o básico da teoria dos conjuntos. União, interseção, está contido, disjunção, negação e etc… Podemos compreender cláusulas de JOINs ou WHEREs complexos com um simples universo rabiscado no papel (Diagrama de Venn).

Um pouco de teoria dos conjuntos pode ser vista na wikipedia.

Menos balela e mais Ctrl+C para vocês testarem…

-- definindo o universo: 
-- dois conjuntos, não disjuntos, A e B.

declare @A table (numero int)
declare @B table (numero int)

insert into @A (numero) values (1)
insert into @A (numero) values (2)
insert into @A (numero) values (3)
insert into @A (numero) values (4)

insert into @B (numero) values (2)
insert into @B (numero) values (4)
insert into @B (numero) values (6)
insert into @B (numero) values (8)

-- A diferença B
-- os membros de A menos os membros de B
-- retiramos aqui todos os membros de B que estão contidos em A

select numero from @A
except
select numero from @B

-- A interseção B
-- todos os membros que existem tanto em A quanto em B

select numero from @A
intersect
select numero from @B

-- A união B
-- todos os membros de A e todos os membros de B

select numero from @A
union all
select numero from @B

-- A união B (distintos)
-- todos os membros de A e todos os membros de B distintos
-- a remoção do operador all acrescenta mais uma etapa ao plano
-- o agrupamento dos valores que elimina os valores
-- "duplicados no resultado" por existirem em tanto em A quanto em B

select numero from @A
union
select numero from @B

Claro que muitos vão dizer que conseguem obter o mesmo resultado utilizando outras praticas, como EXISTS ou JOIN. E é verdade. Escolher entre um meio ou outro de obter resultados vai sempre depender do plano de execução apresentado de acordo com a realidade do ambiente no qual a query será executada. Afinal, é tarefa do otimizador do banco de dados levar em conta índices, processamento e memória disponíveis, estatísticas, e etc… para inferir o plano menos custoso para a execução…

Mas isto já é tema para um próximo post!

T+

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s