Operações com conjuntos no SQL Server

Veja neste artigo informações sobre operações de conjuntos no SQL Server 2008. Mais precisamente, vamos entender na prática os comandos: UNION, INTERSECT e EXCEPT de uma forma simples e direta.

Operações de conjuntos são operações entre dois ou mais conjuntos de entrada (SELECT), ou seja, uma seleção para juntar ou comparar esses conjuntos (tabelas ou campos).

A T-SQL dá suporte aos três conjuntos: UNION (união), INTERSECT (interseção) e EXCEPT (exceção), os dois últimos foram introduzidos a partir do SQL Server 2005.


Guia do artigo:

Veja o modelo da operação de conjuntos como mostra a Listagem 1:

Listagem 1:Modelo de operação de conjuntos.
SELEÇÃO1 (SELECT) <OPERAÇÃO_DE_CONJUNTO> SELEÇÃO2 (SELECT) [ORDER BY...]

Operações de conjuntos UNION

Vamos pensar de acordo com a teoria dos conjuntos, aquele que estudamos na escola. Vamos imaginar os conjuntos A e B, o que a operação UNION faz? Vomo o próprio nome diz, a união desses dois conjuntos, no nosso caso, a união das informações entre duas tabelas. Na T-SQL há suporte a dois tipos de união: UNION ALL e UNION, este ultimo com DISTINCT implícito.

Vamos dar inicio a parte prática do nosso artigo, vou utilizar um banco chamado EXEMPLO_SCHEMA e fazer o seguinte SELECT (UNION ALL), como mostra a Listagem 2:

Listagem 2: Código utilizando o UNION ALL.
SELECT COD, NOME FROM CONTABILIDADE UNION ALL SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE

Veja o resultado do UNION ALL, como mostra a Figura 1:

Figura 1: Resultado da utilização do UNION ALL.

O UNION ALL retorna todas as linhas sem comparar e sem eliminar duplicatas, ou seja, simplesmente puxa todas as informações do SELECT.

Agora vamos mostrar como exemplo o mesmo SELECT sem o ALL, e vamos verificar o resultado. Primeiramente, vejamos o código a ser utilizado, como mostra a Listagem 3:

Listagem 3: Código utilizando o UNION.
SELECT COD, NOME FROM CONTABILIDADE UNION SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE

Apenas o UNION (com o DISTINCT implícito). Neste caso as linhas duplicatas são eliminadas, conforme ilustra a Figura 2:

Figura 2: Resultado da utilização do UNION (DISTINCT implícito).

Operação de conjuntos INTERSECT

A operação INTERSECT funciona de forma um pouco parecida com a UNION, a diferença é que logicamente ela elimina primeiro as linhas duplicadas nos dois selects. Para ser mais claro vamos ao exemplo, como mostra a listagem 4:

Listagem 4: Código utilizando o INTERSECT.
SELECT COD, NOME FROM CONTABILIDADE INTERSECT SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE

Para ficar mais claro, vamos mostrar o resultado, como mostra a Figura 3:

Figura 3: Resultado da utilização do INTERSECT.

Operação de conjuntos EXCEPT

A operação de conjuntos EXCEPT, funciona como se fosse a diferença entre os conjuntos A e B (A - B), ou seja, os elementos que pertencem a A e não a B. Veja o exemplo, cujo código é mostrado na Listagem 5:

Listagem 5: Código utilizando o EXCEPT.
SELECT COD, NOME FROM CONTABILIDADE EXCEPT SELECT COD, NOME FROM FUNCIONARIO.CONTABILIDADE

Para se ter uma ideia, vamos ver o resultado desta operação de conjunto, ilustrado na Figura 4:

Figura 4: Resultado da utilização do EXCEPT.

Para obter mais detalhes sobre operações de conjunto no SQL Server 2008 acessem a documentação.

Com isso finalizo este artigo que teve a real intenção de mostrar, sem muitos detalhes, as operações de conjuntos no SQL Server 2008. Espero que tenham gostado e até o próximo artigo.

Confira também

Artigos relacionados