Banco de Dados

Treino e Dedicação. Habilidade e Presteza com Atenção.

Entendendo Except Intersect e Union

19/09/2016 às 15:21:00 Evaldo Lopes sql

Olá amigos!

Não é de hoje que vejo o pessoal que está iniciando com SQL tendo problemas como EXCEPT, INTERSECT e UNION, ou não sabendo que eles existem. Desta forma, vamos à explicação!

A principal ideia destas cláusulas é "somar" e "subtrair" os registros de duas ou mais consultas.


UNION ALL e UNION

Iniciando com o UNION ALL, ele permite unir os registros de duas consultas. No exemplo abaixo, temos a tabela @A com os registros José, Maria e João, e a tabela @B com os registros Maria, Guilherme e Vitória.

Como no caso o registro Maria com ID 2 está presente nas duas tabelas, com UNION ALL, o registro irá se repetir. Caso queira que os registros iguais não se repitam, basta usar UNION, conforme o exemplo abaixo.

Internamente no SQL no SGBD, o que o UNION faz é um UNION ALL seguindo de um DISTINCT, ou seja, as duas consultas abaixo tem o mesmo plano de execução no SGBD e funcionam da mesma forma.

SELECT ID, NOME FROM @A
UNION
SELECT ID, NOME FROM @B

SELECT DISTINCT ID, NOME
FROM (
SELECT ID, NOME FROM @A
UNION ALL
SELECT ID, NOME FROM @B
) AS C




Plano de execução
Desta forma, evite usar UNION quando UNION ALL já é o suficiente.




EXCEPT
Quando se quer que apareçam os registros da tabela A que não são iguais aos da tabela B, temos a opção de ‘subtrair’ os registros utilizando EXCEPT.





INTERSECT
Por fim, o uso de INTERSECT permite uma intersecção entre as consultas. Que diabos é intersecção? Então, seria como exibir somente os registros que as duas consultas têm em comum.


Seja o primeiro a comentar.

Enviar Comentário

Lembrete!

Todos os campos são de preenchimento obrigatório.

"Senhor eu sei que Tu me sondas, sei também que me conheces...
Senhor! eu que Tu me sondas..."