8th Jul 2022 11 minutos de leitura 7 Exemplos de SQL JOIN com explicações detalhadas Kateryna Koidan sql aprender sql joins Índice Introdução à adesão INNER JOIN Exemplo #1 Exemplo nº 2 JUNÇÃO À ESQUERDA Exemplo #3 Exemplo #4 JUNÇÃO À DIREITA Exemplo #5 JOGOS COMPLETOS Exemplo nº 6 Exemplo #7 Hora de Praticar Cláusulas JOIN em SQL! Você precisa unir várias tabelas para obter o conjunto de resultados necessários? O SQL JOIN é uma ferramenta básica mas importante utilizada pelos analistas de dados que trabalham com bancos de dados relacionais. E entendo que pode ser difícil escolher entre os zilhões de guias introdutórios para junções. Neste artigo, vou me concentrar em exemplos do mundo real com explicações detalhadas. Introdução à adesão Com bancos de dados relacionais, as informações desejadas são muitas vezes armazenadas em várias tabelas. Nesses cenários, você precisará juntar-se a essas tabelas. É aqui que entra em jogo o SQL JOIN. A cláusula JOIN em SQL é usada para combinar linhas de várias tabelas com base em uma coluna relacionada entre estas tabelas. Você pode obter uma visão geral da ferramenta SQL JOIN neste artigo introdutório. Neste guia, quero cobrir os tipos básicos de Cláusulas JOIN em SQL, passando por vários exemplos. Discutirei em detalhes a sintaxe de cada consulta, como ela funciona, como construir uma condição e como interpretar os resultados. Para os exemplos, utilizaremos informações sobre uma editora que publica livros originais e traduzidos. Nosso banco de dados contém quatro tabelas: books, authors, editorse translators. books idtitletypeauthor_ideditor_idtranslator_id 1Time to Grow Up!original1121 2Your Triptranslated152232 3Lovely Loveoriginal1424 4Dream Your Lifeoriginal1124 5Orangestranslated122531 6Your Happy Lifetranslated152233 7Applied AItranslated132334 8My Last Bookoriginal1128 authors idfirst_namelast_name 11EllenWriter 12OlgaSavelieva 13JackSmart 14DonaldBrain 15YaoDou editors idfirst_namelast_name 21DanielBrown 22MarkJohnson 23MariaEvans 24CathrineRoberts 25SebastianWright 26BarbaraJones 27MatthewSmith translators idfirst_namelast_name 31IraDavies 32LingWeng 33KristianGreen 34RomanEdwards Se você quiser praticar a união de tabelas em SQL com muitos exemplos, eu recomendo tomar o Cláusulas JOIN em SQL curso. Inclui 93 desafios de codificação! INNER JOIN Começaremos com um básico INNER JOIN, ou simplesmente, JOIN. Este tipo de união é usado quando desejamos exibir registros correspondentes de duas tabelas. Exemplo #1 Digamos que queremos mostrar os títulos dos livros junto com seus autores (ou seja, o nome e sobrenome do autor). Os títulos dos livros são armazenados no books tabela, e os nomes dos autores são armazenados na tabela authors mesa. Em nossa consulta SQL, vamos juntar estas duas tabelas combinando a coluna author_id da tabela books e a coluna id da tabela authors: SELECT b.id, b.title, a.first_name, a.last_name FROM books b INNER JOIN authors a ON b.author_id = a.id ORDER BY b.id; Na declaração SELECT, listamos as colunas a serem exibidas: id do livro, título do livro, nome do autor e sobrenome do autor. Na cláusula FROM, especificamos a primeira tabela a ser incluída (também referida como a tabela da esquerda). Na cláusula INNER JOIN, especificamos a segunda tabela a ser incluída (também referida como a tabela da direita). Então, usamos a palavra-chave ON para dizer ao banco de dados quais colunas devem ser usadas para corresponder os registros (ou seja, a coluna author_id da books e a coluna id da tabela authors tabela). Observe também que estamos usando pseudônimos para nomes de tabelas (ou seja b para books e a para authors). Atribuímos os pseudônimos nas cláusulas FROM e INNER JOIN e os utilizamos durante toda a consulta. Os aliases da tabela reduzem a digitação e tornam a consulta mais legível. Aqui está o conjunto resultante: idtitlefirst_namelast_name 1Time to Grow Up!EllenWriter 2Your TripYaoDou 3Lovely LoveDonaldBrain 4Dream Your LifeEllenWriter 5OrangesOlgaSavelieva 6Your Happy LifeYaoDou 7Applied AIJackSmart 8My Last BookEllenWriter Para cada registro na tabela da esquerda (ou seja books), a consulta verifica o author_id, depois procura o mesmo id na primeira coluna da tabela authors mesa. Em seguida, ele puxa o nome e sobrenome correspondentes. Note que a ordem das tabelas não importa com INNER JOIN, ou simples JOIN. O conjunto de resultados seria exatamente o mesmo se colocássemos o authors na cláusula FROM e na tabela de books tabela na cláusula INNER JOIN. INNER JOIN exibe apenas os registros que estão disponíveis em ambas as tabelas. Em nosso exemplo, todos os livros têm um autor correspondente e todos os autores têm pelo menos um livro correspondente. Portanto, vamos ver o que acontece se alguns dos registros não forem correspondidos. Exemplo nº 2 Em nosso segundo exemplo, estaremos exibindo livros junto com seus tradutores (ou seja, o sobrenome do tradutor). Apenas metade de nossos livros foi traduzida e, portanto, temos um tradutor correspondente. Então, qual seria o resultado de se juntar ao books e translators tabelas usando INNER JOIN? SELECT b.id, b.title, b.type, t.last_name AS translator FROM books b JOIN translators t ON b.translator_id = t.id ORDER BY b.id; idtitletypetranslator 2Your TriptranslatedWeng 5OrangestranslatedDavies 6Your Happy LifetranslatedGreen 7Applied AItranslatedEdwards A consulta produz somente os livros que foram traduzidos. Acrescentei a coluna do tipo para deixar claro. O resto dos livros não pôde ser correspondido com a coluna de translators tabela e, portanto, não são exibidos. É assim que funciona INNER JOIN. Observe também que no segundo exemplo, estávamos usando JOIN em vez da palavra-chave INNER JOIN. Ela não tem impacto no resultado porque INNER JOIN é o tipo padrão de join em SQL. Você pode aprender sobre outros tipos de SQL JOIN neste guia detalhado. Está bem. Agora sabemos como juntar tabelas quando precisamos apenas que os registros correspondentes sejam exibidos. Mas, e se quisermos manter todos os livros no conjunto resultante sem cortar a tabela apenas para os livros traduzidos? Chegou a hora de aprender sobre as uniões externas! JUNÇÃO À ESQUERDA Começaremos nossa visão geral do OUTER joins com o LEFT JOIN. Você deve aplicar este tipo de SQL JOIN quando quiser manter todos os registros da tabela da esquerda e somente os registros combinados da tabela da direita. Exemplo #3 Por exemplo, digamos que queremos exibir informações sobre o autor e o tradutor de cada livro (ou seja, seus sobrenomes). Também queremos manter as informações básicas sobre cada livro (ou seja, id, title, e type). Para obter todos estes dados, precisaremos juntar três tabelas: books para informações básicas sobre os livros, authors para os sobrenomes dos autores, e translators para os sobrenomes dos tradutores. Como vimos no exemplo anterior, usando o INNER JOIN (ou simples JOIN) para se juntar ao translators tabela resulta na perda de todos os registros de livros originais (não traduzidos). Isso não é o que queremos agora. Portanto, para manter todos os livros no conjunto de resultados, vamos nos juntar ao books, authorse translators utilizando as tabelas LEFT JOIN. SELECT b.id, b.title, b.type, a.last_name AS author, t.last_name AS translator FROM books b LEFT JOIN authors a ON b.author_id = a.id LEFT JOIN translators t ON b.translator_id = t.id ORDER BY b.id; Veja que começamos com a books na cláusula FROM, tornando-a a tabela da esquerda. Isso porque queremos manter todos os registros desta tabela. A ordem das outras tabelas não importa. Em nossa consulta, primeiramente LEFT JOIN a authors tabela baseada na coluna author_id da books e a coluna id da tabela authors mesa. Em seguida, nós nos juntamos à translators tabela baseada na coluna translator_id da books e a coluna id da tabela translators mesa. Aqui está a tabela resultante: idtitletypeauthortranslator 1Time to Grow Up!originalWriterNULL 2Your TriptranslatedDouWeng 3Lovely LoveoriginalBrainNULL 4Dream Your LifeoriginalWriterNULL 5OrangestranslatedSavelievaDavies 6Your Happy LifetranslatedDouGreen 7Applied AItranslatedSmartEdwards 8My Last BookoriginalWriterNULL Ótimo! Guardamos todos os livros! Observe os valores NULL na coluna translator. Estes valores NULL correspondem aos registros que não foram correspondidos na tabela translators mesa. Estes registros são para livros originais sem nenhum tradutor envolvido. Esperamos que você tenha compreendido a intuição por trás de LEFT JOINs. Você pode aprender mais sobre este tipo de SQL JOIN neste guia introdutório. Muito bem, vamos passar por outro exemplo LEFT JOIN para consolidar o conhecimento sobre o tema. Exemplo #4 Desta vez, queremos mostrar as informações básicas do livro (isto é, ID e título) junto com os sobrenomes dos editores correspondentes. Mais uma vez, queremos manter todos os livros no conjunto de resultados. Então, qual seria a consulta? SELECT b.id, b.title, e.last_name AS editor FROM books b LEFT JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans 8My Last BookNULL Bastante simples, certo? Mantivemos novamente todos os livros no conjunto de resultados, inclusive o último, que não tem um editor correspondente em nosso banco de dados (observe o valor NULL na última linha). Podemos imaginar que o editor não esteja presente na tabela de nossos editores atuais simplesmente porque eles deixaram a editora após a edição do livro. Espere! E se tivermos alguns editores na equipe que ainda não tenham publicado nenhum livro? Vamos verificar com o próximo tipo de união externa. JUNÇÃO À DIREITA RIGHT JOIN é muito semelhante a LEFT JOIN. Aposto que você adivinhou que a única diferença é que RIGHT JOIN mantém todos os registros da tabela da direita, mesmo que não possam ser correspondidos com a tabela da esquerda. Se o fez, você está correto! Exemplo #5 Vamos repetir nosso exemplo anterior, mas desta vez, nossa tarefa será a de manter todos os registros do editors mesa. Assim, teremos a mesma consulta que no exemplo #4, exceto que substituímos LEFT JOIN por RIGHT JOIN: SELECT b.id, b.title, e.last_name AS editor FROM books b RIGHT JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans NULLNULLJones NULLNULLSmith Com apenas uma palavra alterada na consulta, o resultado é muito diferente. Podemos ver que de fato temos dois editores(Jones e Smith) que não têm livros correspondentes em nosso banco de dados. Parece que são novas contratações! E essa não é a única mudança. Também não temos Meu Último Livro no conjunto de resultados. Este registro da tabela da esquerda (i.e, books) não foi igualado na tabela da direita (ou seja, editors) e não chegou ao resultado final. Os RIGHT JOINs são raramente utilizados na prática, pois geralmente podem ser substituídos por LEFT JOINs que são muito mais comuns. Por exemplo, em nosso caso, poderíamos pegar nossa consulta do exemplo nº 4 e simplesmente trocar books e editors colocando editors na cláusula FROM, tornando-a a mesa da esquerda, e colocando books na cláusula LEFT JOIN, tornando-a a mesa certa. O resultado teria sido o mesmo que a tabela acima. JOGOS COMPLETOS Aqui chegamos ao último tipo de união externa, que é FULL JOIN. Usamos FULL JOIN quando queremos manter todos os registros de todas as tabelas, mesmo as inigualáveis. Portanto, é como LEFT JOIN e RIGHT JOIN juntos. Vamos direto aos exemplos para ver como isto funciona na prática. Exemplo nº 6 Para começar, vamos juntar-nos novamente à books e editors tabelas, mas desta vez, vamos manter todos os registros de ambas as tabelas. Simplesmente usamos FULL JOIN como a palavra-chave join, deixando o resto da consulta sem nenhuma alteração: SELECT b.id, b.title, e.last_name AS editor FROM books b FULL JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans 8My Last BookNULL NULLNULLJones NULLNULLSmith Parece ótimo! Como era de se esperar, guardamos todos os livros, mesmo aquele sem um editor correspondente. Além disso, mantivemos todos os editores, mesmo aqueles que ainda não têm livros correspondentes. Note que a ordem das tabelas não importa com FULL JOIN. O resultado seria o mesmo se trocássemos as tabelas colocando o editors na cláusula FROM e na tabela de books tabela na cláusula FULL JOIN. Exemplo #7 Em nosso exemplo final, queremos juntar todas as quatro mesas para obter informações sobre todos os livros, autores, editores e tradutores em uma única mesa. Assim, vamos utilizar FULL JOIN ao longo de nossa consulta SQL: SELECT b.id, b.title, a.last_name AS author, e.last_name AS editor, t.last_name AS translator FROM books b FULL JOIN authors a ON b.author_id = a.id FULL JOIN editors e ON b.editor_id = e.id FULL JOIN translators t ON b.translator_id = t.id ORDER BY b.id; idtitleauthoreditortranslator 1Time to Grow Up!WriterBrownNULL 2Your TripDouJohnsonWeng 3Lovely LoveBrainRobertsNULL 4Dream Your LifeWriterRobertsNULL 5OrangesSavelievaWrightDavies 6Your Happy LifeDouJohnsonGreen 7Applied AISmartEvansEdwards 8My Last BookWriterNULLNULL NULLNULLNULLJonesNULL NULLNULLNULLSmithNULL Conforme solicitado, a tabela exibe todos os livros, autores, editores e tradutores. Os registros que não foram correspondidos têm os valores NULL. Esta é uma ótima visão geral dos dados armazenados em nosso banco de dados. Hora de Praticar Cláusulas JOIN em SQL! Proficiência com Cláusulas JOIN em SQL é um dos principais requisitos para qualquer pessoa que trabalhe com bancos de dados relacionais. Para ajudá-lo a navegar nos diferentes tipos de SQL JOINs, LearnSQL.com desenvolveu uma folha de consultas SQL JOIN de duas páginas. Ela fornece a sintaxe dos diferentes JOINs, bem como exemplos. No entanto, para dominar o JOINs, é preciso ter muita prática. Eu recomendo começar com o Cláusulas JOIN em SQL curso que cobre os tipos importantes de JOINs, passando por dezenas de exemplos e exercícios. Saiba mais sobre este curso neste artigo geral. BÔNUS: Aqui estão as 10 principais perguntas da entrevista SQL JOIN e como responder a elas. Feliz aprendizagem! Tags: sql aprender sql joins