Lição 4: Combining Datasets


Olá pessoal!

Menos de 24hs depois do post anterior eis que estou aqui novamente!

Mas vamos ao que realmente interessa! 🙂

Nesta Lição iremos ver quais operadores o SQL Server 2008 nos disponibiliza para podermos combinar ou comparar valores em múltiplas instruções SELECT.

Veremos primeiramente o operador UNION que combina os conjuntos de valores de múltiplas queries em um único conjunto de dados, enquanto os operadores EXCEPT e INTERSECT compare os resultados de duas consultas para determinar o subconjunto de linhas que devem ser incluído no conjunto de resultados final

Using the UNION Operator

Conforme dito anteriormente o operador UNION que combina os conjuntos de valores de múltiplas queries em um único conjunto de dados e para utilizarmos este operador basicamente temos que seguir as seguintes regrinhas:

  • Ambas as queries devem retornar o mesmo número de colunas;
  • Os tipos de dados de cada coluna devem ser compatíveis;
  • O nome da coluna que será exibida, será a da primeira query;
  • A instrução ORDER BY pode ser utilizado após o último SELECT, porém ele será referente ao primeiro SELECT;
  • Cada instrução SELECT pode ter sua própria cláusula WHERE.

Vejamos o exemplo apresentado no Trainning Kit o qual nos permite termos uma fácil visualização.

SELECT FirstName + ' ' + LastName AS 'Contato'
, 'Comerciante da Northwind' AS 'Empresa'
, HomePhone AS 'Telefone'
FROM Employees
UNION
SELECT ContactName, CompanyName, Phone
FROM Customers
ORDER BY 'Contato';
Fig. 26 - Exemplo de uso do operador UNION

Fig. 26 - Exemplo de uso do operador UNION

Nesta exemplo de UNION mostrado acima não há nada de novo, apenas a inclusão do operador UNION entre as instruções SELECT e as 05 regrinhas básicas citadas no início da explicação.

Talvez a única coisa que possa não ter ficado muito claro foi o porque termos utilizado a string ‘Comerciante da Northwind’ no meio do SELECT, isto se dá pelo fato de que na tabela EMPLOYEES não temos uma coluna referente à EMPRESA, portanto definimos que para todo registro da tabela EMPLOYEE a string ‘Comerciante da Northwind’ deveria ser setado como valor para esta coluna.

Using the EXCEPT and INTERSECT Commands

Ao contrário do operador UNION o EXCEPT e o INTERSECT comparam os dados de duas queries distintas e retornam um subconjunto de informações.

Vejamos primeiramente um exemplo de uso do EXCEPT que tem como função em nosso exemplo exibir todos os registros do SELECT da esquerda do operador EXCEPT que não aparecem no conjunto de dados do SELECT da direita.

O operador EXCEPT segue as mesmas regrinhas de número de colunas e compatibilidade de dados que o operador UNION, vejamos dois exemplos abaixo:

SELECT EmployeeKey
FROM DimEmployee
EXCEPT
SELECT EmployeeKey
FROM FactResellerSales;
Fig. 27 - Exemplo básico de uso do EXCEPT

Fig. 27 - Exemplo básico de uso do EXCEPT

Neste primeiro exemplo de forma bem simples retornamos apenas o registros da coluna EmployeeKey que não aparecem no segundo SELECT, porém veja a seguinte situação.

Eu quero adicionar mais informações como por exemplo o nome dos meus funcionários e suas funções, porém estes dados não correspondem à tabela FACTRESELLERSALES, portanto teoricamente não poderíamos incluí-los, mas para resolver isso podemos utilizar nosso amigo JOIN já estudado anteriormente.

Veja o exemplo abaixo:

SELECT EmployeeKey, FirstName AS 'Nome', LastName AS 'Sobrenome'
, Title AS 'Função'
FROM DimEmployee
EXCEPT
SELECT FRS.EmployeeKey, DE.FirstName, DE.LastName, DE.Title
FROM FactResellerSales FRS      JOIN DimEmployee DE      ON DE.EmployeeKey = FRS.EmployeeKey
ORDER BY Title;
Fig. 28 - Exemplo de EXCEPT com JOIN

Fig. 28 - Exemplo de EXCEPT com JOIN

Em oposto ao que acabamos de ver, caso o objetivo seja exibir os dados que aparecem em ambas as colunas, utilizaremos o operador INTERSECT, fechamos o mesmo exemplo acima apenas substituindo o operador EXCEPT por INTERSECT.

SELECT EmployeeKey, FirstName AS 'Nome', LastName AS 'Sobrenome',
 Title AS 'Função'
FROM DimEmployee
INTERSECT
SELECT FRS.EmployeeKey, DE.FirstName, DE.LastName, DE.Title
FROM FactResellerSales FRS      JOIN DimEmployee DE      ON DE.EmployeeKey = FRS.EmployeeKey
ORDER BY Title;
Fig. 29 - Exemplo do uso do operador INTERSECT

Fig. 29 - Exemplo do uso do operador INTERSECT

No exemplo acima exibimos apenas os registros onde os mesmos dados existem em ambas as tabelas.

E é isso pessoal, pelo o que vocês puderam notar a Lição 4 é bem curtinha e os posts agora irão fluir mais rapidamente, portanto não deixem de acompanhar e fazer seus comentários.

Grande abraço e sucesso a todos! 😉

Lucas A. Romão

Anúncios

3 Responses to Lição 4: Combining Datasets

  1. […] This post was mentioned on Twitter by Lucas Almeida Romão, Azure Services Br. Azure Services Br said: New Blog Post: Lição 4 – Combining Datasets | http://bit.ly/chlq7L #EstudandoPara70433 #SQLServer o/ RT 😉 […]

  2. Using the UNION Operator

    Conforme dito anterormente o operador UNION que combina os conjuntos de valores de multiplas queries em um único conjunto de dados e para utilizarmos este operator basicamente temos que seguir as seguintes regrinhas:

    Ambas as queries devem retornar o mesmo número de linhas;

    Isso é correto? Ambas as queries devem retornar o mesmo número de linhas? Creio que não.

    De resto, ta ótimo, valeu =)

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

%d blogueiros gostam disto: