Trabalhando com JOIN (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:

  1. INNER JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. OUTER JOIN
  5. LEFT JOIN “excluindo” INNER JOIN
  6. RIGHT JOIN “excluindo” INNER JOIN
  7. 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

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

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

Anúncios

23 pensamentos sobre “Trabalhando com JOIN (ou Junções)

    • Nedio, mesmo que não seja só de JOINs que se faz uma query, o artigo do C.L. Moffatt ficou bem claro e objetivo.

      Obrigado pelo comentário! Qualquer dúvida pode me contatar que estarei disposto a esclarecer.

  1. Pingback: Query From Hell? – Comparando a estrutura de tabelas diferentes « Sql From Hell.com

  2. Somente elogios…
    Estou há um tempinho sem usar sql e esse artigo caiu como uma luva. Imagens com explicação rápida, um casamento perfeito. Parabéns.

  3. Muito bom o post
    Tem muita gente que se perde com os Joins por nao saber usa-los, deixou de uma forma clara, com as imagens nao tem erro.

  4. Excelente explicação.

    Existem pessoas que sabem transformar um assunto dificil em uma coisa muito simples.

  5. Pingback: Aniversário de 3 anos do SQL From Hell!! « SQL From Hell.com

  6. Pingback: Utilizando JOIN no SQL | rneves

  7. Muito bom seu artigo, estava a dias quebrando kbç.mais com essa explicaçao clara e objetiva consegui resolver meu problama com o INNER JOIN.
    é q sou novato em programaçao e me indentifiquei mais com PHP.
    Valeu, Obrigado.

  8. Pingback: Entendendo EXCEPT, INTERSECT e UNION do SQL | SQL From Hell.com

  9. Perfeito cara, estou criando uma apostila para ensinar o pessoal que está iniciando agora na empresa, tinha feito um material próprio para os joins ai encontrei o seu link. (até quero saber se posso usá-lo) então deletei o que eu fiz, colei o seu e coloquei:
    “Abaixo um Ctrl+C e Ctrl+V do site SQL From Hell, sem nenhuma adição ou alteração no texto que achei perfeito, está muito melhor do que aquilo que eu estava transcrevendo com minhas palavras, não tinha como mexer, alterar ou qualquer coisa porque achei simplesmente perfeito. Para não alterar o texto, coloco aqui minha única adição ao conteúdo:
    Nos Joins Left, Right e Full pode-se usar como Left Outer Join, Right Outer Join e Full Outer Join, não usando a palavra Outer explicitamente, o SGBD adiciona-a implicitamente.
    https://sqlfromhell.wordpress.com/2009/09/15/trabalhando-com-join/
    segundo o site SQL From Hell: 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

  10. Pingback: LMDB – SQL – Junções (JOINS) | Alex Sandro Valério

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