Usando EXCEPT e INTERSECT para comparar resultados no SQL Server

Publicado: 21 de agosto de 2013 em Diversos

É ai pessoal, neste post vou falar sobre dois comandos que podem ajudar a vida de muita gente e que por incrível que pareça é bem pouco conhecido, principalmente para quem está iniciando na área. Trata-se dos comandos de comparação do T-SQL o Except e o Intersect, estes dois comandos realizam a comparação de valores distintos entre 2 tabelas e é extremamente útil.

A sintaxe do comando retirada do site oficial ( http://technet.microsoft.com/pt-br/library/ms188055(v=sql.100).aspx) :

{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }

Traduzindo

SELECT x,y FROM Z
EXCEPT OU INTERSECT
SELECT x,y FROM W

Bom para que possam entender melhor vou preparar um cenário de teste e ir explicando passo a passo:

Primeiro passo, estou criando 2 tabelas temporárias apenas para ilustrar os testes, fiz o mais simples possível para que possam entender os dados posteriormente.

— CRIAÇÃO DO CENÁRIO DE TESTE

— TABELA TEMPORÁRIA B
create table #A (
 ID 
int not null identity(1,1) primary key
,nome varchar(50)
,salario Money
);

GO

— TABELA TEMPORÁRIA B
create 
table #B (
 ID int not null identity(1,1) primary key
,nome varchar(50)
,salario money
);

Agora vou realizar alguns inserts , afim de realizar a comparação dos dados

— INSERTS NECESSÁRIOS TABELA #A

INSERT INTO #A values (‘MARCELO’,345.49);
INSERT INTO #A values (‘BEATRIZ’,185.49);
INSERT INTO #A values (‘JUAREZ’,745.49);
INSERT INTO #A values (‘JOSE’,3345.49);

GO

— INSERTS NECESSÁRIOS TABELA #B

INSERT INTO #B values (‘JOSE’,3345.49);
INSERT INTO #B values (‘JOAO’,2345.49);
INSERT  INTO #B values (‘JUAREZ’,745.49);

 

Analisando os dados a seguir e imaginando que fossem 30.000 registros, poderíamos nos perguntar:

  1. Quais são os dados distintos entre a tabela #A e tabela #B ?
  2. Quais valores distintos presentes nas  tabelas #A e  #B ?

Para responder exatamente estas questões é que entram em ação os comandos Except e Intersect onde :

EXCECPT: Retorna os dados distintos da tabela #A e que não existam na tabela #B.
INTERSECT: Retorna os valores distintos entre nas tabelas #A e #B.

Na prática:

A Tabela #A possui:

MARCELO    345,49
BEATRIZ    185,49
JUAREZ    745,49
JOSE    3345,49

A Tabela #B possui:

JOSE    3345,49
JOAO    2345,49
JUAREZ    745,49

Logo :

SELECT NOME,SALARIO FROM #A
EXCEPT
SELECT NOME,SALARIO FROM #B

 Devo ter como resultado os valores de #A que não estão em #B como podem ver abaixo

EXCEPT
BEATRIZ    185,49
MARCELO    345,49

Agora caso eu execute:

SELECT NOME,SALARIO FROM #A
INTERSECT
SELECT NOME,SALARIO FROM #B

Devo ter como resultado os valores que distintos que apareçam tanto na tabela #A quanto na #B como podem ver abaixo

INTERSECT
JOSE    3345,49
JUAREZ    745,49

OBS: Estes comandos foram introduzidos no SQL Server a partir da versão 2008 J

 

É isso ai galera, espero que possa ter ajudado a esclarecer as dúvidas e até a próxima …

 

 

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