segunda-feira, 29 de junho de 2015

SQL Joins: Entenda como funciona o retorno dos dados

Muitos programadores têm a dificuldade de saber qual resultado é retornado de cada join no SQL. Por conta disso, esse post foi feito com base em estudos e consultas na prática. A Figura 1 vai nos ajudar a entender os resultados obtidos de cada join.
Figura 1 - Joins em SQL.
Em cima dessa figura, vamos criar a estrutura e realizar as consultas usando cada join.

Para isso, o primeiro passo é criar as tabelas A e B, conforme mostra o código da Seleção 1.

Mas atenção: este post não tem o foco de melhores práticas, normalização etc. por isso, serão criadas apenas duas tabelas simples com apenas um campo chamado nome para visualizar o resultado de cada join.

Seleção 1 - Criando as tabelas.

CREATE TABLE TabelaA(
Nome varchar(50) NULL
)
GO
CREATE TABLE TabelaB(
Nome varchar(50) NULL
)


Já o segundo passo inclui a inserção de valores nas tabelas A e B. A Seleção 2 exibe os valores que serão incluídos nas tabelas A e B.

Seleção 2 - Inclusão de dados nas tabelas.

INSERT INTO TabelaA VALUES('Willian')
INSERT INTO TabelaA VALUES('Pamela')
INSERT INTO TabelaA VALUES('Alfredo')
INSERT INTO TabelaA VALUES('Carlos')

INSERT INTO TabelaB VALUES('Pamela')
INSERT INTO TabelaB VALUES('Tiago')
INSERT INTO TabelaB VALUES('Jefferson')
INSERT INTO TabelaB VALUES('Alfredo')



Vamos analisar cada um dos joins.

Inner Join

Usando o inner join, conforme mostra a Figura 2, teremos como resultado todos os registros comuns nas duas tabelas









Figura 2 - Usando Inner Join.

Para isso executaremos os comandos presentes na Seleção 3.

Seleção 3 - Usando Inner Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
INNER JOIN TabelaB as B
on a.Nome = b.Nome


Na prática, o resultado será conforme a Figura 3.

Retorno do Inner Join















Figura 3 - Retorno do Inner Join.

Left Join



Usando o Left Join, conforme mostra a Figura 4, teremos como resultado todos os registros que estão na tabela A (mesmo que não estejam na tabela B) e os registros da tabela B que são comuns na tabela A. Para entender melhor, executaremos o código presente na Seleção 4.









 Figura 4 - Usando Left Join

Seleção 4 - Usando Left Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
LEFT JOIN TabelaB as B
on a.Nome = b.Nome


E na prática o resultado será conforme a Figura 5.
















Figura 5 - Retorno do Left Join.

Right Join



Usando o Right Join, conforme mostra a Figura 6, teremos como resultado todos os registros que estão na tabela B (mesmo que não estejam na tabela A) e os registros da tabela A que são comuns na tabela B. Para vermos isso na prática, executaremos os comandos da Seleção 5.









Figura 6 - Usando Right Join

Seleção 5 -Usando Right Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
RIGHT JOIN TabelaB as B
on a.Nome = b.Nome


O resultado desses comando será o mesmo apresentado na Figura 7.

















Figura 7 - Retorno do Right Join.

Outer Join


Usando o Outer Join (conhecido por Full Outer Join ou Full Join), conforme mostra a Figura 8, teremos como resultado todos os registros que estão na tabela A e todos os registros da tabela B. Na prática, você deve executar os mesmos comando presentes na Seleção 6.









Figura 8 - Usando Full Outer Join e Full Join

Seleção 6 -Usando Full Outer Join ou Full Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B
on a.Nome = b.Nome

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL JOIN TabelaB as B
on a.Nome = b.Nome


E na prática o resultado será conforme a Figura 9.





















Figura 9 - Retorno do Full Outer Join ou Full Join

Left Excluding Join



Na Figura 10 temos o uso do Left Excluding Join, que retorna como resultado todos os registros que estão na tabela A e que não estejam na tabela B. Os comandos desses join estão presentes na Seleção 7 e o resultado desses comandos são apresentados na Figura 11.









Figura 10 - Usando Left Excluding Join

Seleção 7 - Usando Left Excluding Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
LEFT JOIN TabelaB as B
on a.Nome = b.Nome
WHERE b.Nome is null
















Figura 11 - Retorno do Left Excluding Join

Right Excluding Join



Usando o Right Excluding Join, conforme mostra a Figura 12, teremos como resultado todos os registros que estão na tabela B e que não estejam na tabela A. Para vermos isso na prática, precisamos executar os comandos da Seleção 8. Como resultado, teremos os mesmos registros retornados na Figura 13.









Figura 12 - Usando Right Excluding Join.

Seleção 8 - Usando Right Excluding Join.

SELECT a.Nome, b.Nome
FROM TabelaA as A
RIGHT JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null
















Figura 13 - Retorno do Right Excluding Join.

Outer Excluding Join



Usando o Outer Excluding Join, conforme mostra a Figura 14, teremos como resultado todos os registros que estão na tabela B (que não estejam na tabela A) e todos os registros que estão na tabela A (que não estejam na tabela B).









Figura 14 - Usando Outer Excluding Join

Para isso, executaremos o comando da Seleção 9.

Seleção 9 - Usando Outer Excluding Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null or b.Nome is null

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null or b.Nome is null


E na prática o resultado será conforme a Figura 15.























Figura 15 - Retorno do Outer Excluding Join

Conclusão



Esses foram mais alguns comandos importantíssimos no desenvolvimento de profissionais que vão atuar como programadores ou administradores de banco de dados.

Fiquem atentos e vamos para os estudos!!
Se tiverem alguma dúvida ou sugestões de novos posts favor me avise pelo Facebook ou então deixando seu comentário no blog.

Nenhum comentário:

Postar um comentário