UNION, UNION ALL, INTERSECT E EXCEPT

Neste artigo estarei falando das diretrizes UNION, UNION ALL, INTERSECT e EXCEPT que podem ser importantes no dia a dia de um DBA, vou passar além de teorias alguns exemplos de sua utilização.

Quando se procura no google sobre essas diretrizes é comum vermos imagens iguais a esta:

maxresdefault (2)

Mas o que ela representa na pratica?

UNION – Retorna à junção das duas ou mais tabelas trazendo valores como se utilizasse a clausula distinct, ou seja, não retorna valores repetidos. Caso você tenha o valor 10 na tabela A e também na tabela B a diretriz UNION trará o valor 10 somente uma vez.

UNION ALL – Retorna todos os valores das duas ou mais tabelas, sua diferença para o UNION é que em caso de ter dois ou mais valores repetidos contidos em 2 ou mais tabelas o valor será retornado.

INTERSECT – Retorna à interseção das duas ou mais tabelas, ou seja, os valores retornados são encontrados tanto na tabela A quanto na tabela B.

EXCEPT – Retorna tudo que for exceção entre a tabela A para a tabela B, caso tenhamos na tabela A os valores (1,2,3,4) e na tabela B (2,4,6) um EXCEPT entre A e B somente retornaria (1,3)

Observações:

  1. Para realizarmos qualquer operação com as diretrizes a cima é necessário que haja o mesmo número de colunas informadas no select.
  2. Somente na primeira consulta podemos utilizar INTO para gerarmos um novo objeto.
  3. Caso deseje realizar um insert com o retorno você poderá utilizar UNION, INTERSECT e EXCEPT.
  4. Você pode realizar uma consulta utilizando várias vezes a mesma diretriz assim como pode utilizar UNION e logo depois INTERSECT e logo depois EXCEPT não necessariamente nesta ordem.

Vamos ao exemplo:

Para este exemplo criei duas tabelas com funcionários DBA e funcionários DES, o Carlos Henrique existe nas duas tabelas, o Alexandre Curvelo, Pedro Vieira, Thiago Cruz e Wallacy Marques só na DBA e Lidia Rosa, Fernando Carlos, Andre Fara, Marcos Paulo e Paulo Menezes são encontrados somente na DES.

Use GuiaDBA
Go
Create Table Recurso_DBA (nome varchar(20), cargo varchar (20), fl_ativo_funcao bit)
Go
Insert Into Recurso_DBA Values ('Thiago Cruz','DBA',1),('Alexandre Curvelo','DBA',1),('Pedro Vieira','DBA',0),('Wallacy Marques','DBA',1),('Carlos Henrique','DBA',0)
Go
Create Table Recurso_DES (nome varchar(20), cargo varchar (20), fl_ativo_funcao bit)
Go
Insert Into Recurso_DES Values ('Lidia Rosa','DES',1),('Carlos Henrique','DES',1),('Fernando Carlos','DES',0),('Andre Fara','DES',1),('Marcos Paulo','DES',0), ('Paulo Menezes','DES',1)
Go

Executando UNION, UNION ALL, INTERSECT E EXCEPT:

Select nome from Recurso_DBA
Union
Select nome from Recurso_DES
Go

Retorno:

Union

 

Select nome from Recurso_DBA
Union All
Select nome from Recurso_DES
Go

Retorno:

Union ALL

 

Select nome from Recurso_DBA
Intersect
Select nome from Recurso_DES
Go

Retorno:

INTERSECT

 

Select nome from Recurso_DBA
Except
Select nome from Recurso_DES
Go

Retorno:

EXCEPT

Note que quando utilizamos UNION o Carlos Henrique só aparece uma vez e quando utilizamos UNION ALL o mesmo aparece duas vezes pois está presente nas duas tabelas.

1 Comentário

Adicionar comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *