Entendendo o JOIN do SQL (ou Junções)
Boa noite pessoal!
Navegando pela internet, me deparei com um ótimo guia visual sobre os JOINs. Como o próprio autor do guia visual disse “As coisas parecem fazer sentido com imagens. Eu olhei pela internet por uma boa representação gráfica dos SQL JOINs, mas não pude encontrar nada que me agradasse.” (tradução livre), concordo com o autor, pois muitos exemplos pela internet complicam mais do que explicam como funcionam os JOINs, mas o guia que ele desenvolveu ficou muito bom.
Alguns vão achar este tópico um pouco “básico” em comparação aos que tenho escrito, mas eu e muitas pessoas que indiquei o guia inglês acharam este guia muito interessante, e com este post estarei “traduzindo” o guia, esperando que seja de utilidade didática e até mesmo pessoal para vocês. Principalmente para que aprendamos como expressar melhor conceitos para nós são tão simples, mas que muitas vezes não sabemos explicar de uma forma adequada.
Irei abordadar neste post sete diferentes formas de retornar dados de duas tabelas relacionadas, mas além destes existem outros JOINS. Os JOINs demonstrados serão os seguintes:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- OUTER JOIN
- LEFT JOIN “excluindo” INNER JOIN
- RIGHT JOIN “excluindo” INNER JOIN
- OUTER JOIN “excluindo” INNER JOIN
Obs.: Os JOINs 5, 6 e 7 são na verdade variações dos anteriores, mas ainda podem ser considerados JOINs, devido aos seus comportamentos.
INNER JOIN
Este é simples, o mais entendível e o mais comum. Esta consulta retornará todos os registros da tabela esquerda (tabela A) que têm correspondência com a tabela direita (tabela B). Podemos escrever este JOIN da seguinte forma:
SELECT * FROM A INNER JOIN B ON A.Key = B.Key
LEFT JOIN
Esta consulta retorna todos os registros da tabela esquerda (tabela A) e as correspondências que existirem com a tabela direita (tabela B). O código ficará da seguinte forma:
SELECT * FROM A LEFT JOIN B ON A.Key = B.Key
RIGHT JOIN
Esta consulta retornará todos os registros da tabela direita (tabela B) e as correspondências que existirem com a tabela esquerda (tabela A). O código ficará da seguinte forma:
SELECT * FROM A RIGHT JOIN B ON A.Key = B.Key
OUTER JOIN
Este JOIN também é conhecido como FULL OUTER JOIN ou FULL JOIN. Esta consulta retornará todos os registros das duas tabelas e juntando também os registros correspondentes entres as duas tabelas. O código ficará da seguinte forma:
SELECT * FROM A FULL OUTER JOIN B B ON A.Key = B.Key
LEFT Excluding JOIN (LEFT ANTI SEMI JOIN)
Esta consulta retornará apenas os registros da tabela esquerda que não têm correspondência com a tabela direita. O código ficará da seguinte forma:
SELECT * FROM A LEFT JOIN B ON A.Key = B.Key WHERE B.Key IS NULL
RIGHT “excluindo” JOIN (RIGHT ANTI SEMI JOIN)
Esta consulta retornará todos os registros da tabela esquerda que não têm correspondência com a tabela direita. O código ficará da seguinte forma:
SELECT * FROM A RIGHT JOIN B ON A.Key = B.Key WHERE A.Key IS NULL
OUTER “excluindo” JOIN
Esta consulta retornará todos os registros das duas tabelas que não têm correspondência. O código ficará da seguinte forma:
SELECT * FROM A FULL OUTER JOIN B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL
Para quem tiver interesse na figura completa com os JOINs demonstrados, segue abaixo o link:
O autor do artigo original se chama C.L. Moffatt, quem tiver interesse no artigo original e os exemplos que este autor utilizou, segue o link abaixo:
http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx