22nd Jun 2023 8 minutos de leitura Como escrever várias junções em uma consulta SQL Dominika Florczykowska sql joins Índice Vamos começar com um exemplo Como funciona a junção de várias tabelas Tabelas de junção Uma tabela de junção com colunas adicionais Uma tabela de junção de 3 vias Vamos unir algumas tabelas! Você já se perguntou como funcionam as junções múltiplas? Quer saber como unir várias tabelas em uma única consulta? Leia este artigo para descobrir! Se você está apenas começando sua jornada no SQL, talvez tenha achado difícil entender o conceito de SQL JOINs, especialmente se tiver de unir mais de duas tabelas em uma consulta. Não se preocupe! Neste artigo, exploraremos como o JOIN funciona e resolveremos todos os seus mistérios! A melhor maneira de aprender SQL é por meio da prática. Se você quiser dominar a junção de tabelas em SQL, confira nosso Cláusulas JOIN em SQL curso interativo. Ele oferece mais de 90 exercícios práticos que farão com que você escreva muitos tipos diferentes de JOINs. Vamos começar com um exemplo Imagine que você tenha as três tabelas a seguir: player, team, e coach. Vamos criar uma consulta que listará os nomes de todos os jogadores, o nome do time e o nome do técnico. Você pode obter todas essas informações usando a seguinte consulta: SELECT player.name, team.name, coach.name FROM player JOIN team ON player.team_id = team.id JOIN coach ON team.coach_id = coach.id; Temos duas operações JOIN diferentes aqui. As tabelas player e team são unidas primeiro e, em seguida, a tabela coach também é unida. Para criar uma condição de união, precisamos que ambas as tabelas unidas tenham uma coluna que contenha as mesmas informações. A coluna team_id na tabela player contém team_id; esse é o mesmo valor que a coluna id na tabela team da tabela. Portanto, a primeira condição de união é ON player.team_id = team.id Da mesma forma, a união entre a tabela team e a tabela coach é ON team.coach_id = coach.id. Se você tiver dificuldade para lembrar a sintaxe exata de Cláusulas JOIN em SQL, não deixe de marcar nossa incrível folha de dicas sobre SQL JOIN! Como funciona a junção de várias tabelas Digamos que tenhamos os seguintes dados em nossas tabelas: coach idname 1Mark Swanson 2Alice Wright team idnamecoach_id 1Ambitious Raptors2 2Fire Pandas1 3Steel Cats2 player idnameteam_id 1John Rodger1 2Paul Smith1 3David McDonald2 4Sarah Grey3 5Sophie Brown3 Agora, vamos executar a consulta que listará os nomes de todos os jogadores, o nome do time e o nome do técnico: SELECT player.name, team.name, coach.name FROM player JOIN team ON player.team_id = team.id JOIN coach ON team.coach_id = coach.id; Obteremos a seguinte tabela como resultado: player.nameteam.namecoach.name John RodgerAmbitious RaptorsAlice Wright Paul SmithAmbitious RaptorsAlice Wright David McDonaldFire PandasMark Swanson Sarah GreySteel CatsAlice Wright Sophie BrownSteel CatsAlice Wright Ok, mas o que realmente acontece "por baixo do pano" quando duas tabelas são unidas? Vamos dar uma olhada mais de perto em nosso exemplo. Primeiro, o site JOIN das tabelas player e team formam uma "tabela virtual". Ela teria a seguinte aparência: player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_id 1John Rodger11Ambitious Raptors2 2Paul Smith11Ambitious Raptors2 3David McDonald22Fire Pandas1 4Sarah Grey33Steel Cats2 5Sophie Brown33Steel Cats2 Como você pode ver, essa "tabela virtual" contém todas as colunas das tabelas player e team tabelas. Ei, juntamos 3 tabelas nessa consulta de exemplo! O que aconteceu com a tabela coach tabela? Isso é fácil! Já temos uma "tabela virtual" composta pelas tabelas player e team portanto, parece que estamos novamente com uma união de duas tabelas - só que desta vez vamos unir a tabela coach à "tabela virtual". Portanto, a tabela unida final terá a seguinte aparência: player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_idcoach.idcoach.name 1John Rodger11Ambitious Raptors22Alice Wright 2Paul Smith11Ambitious Raptors22Alice Wright 3David McDonald22Fire Pandas11Mark Swanson 4Sarah Grey33Steel Cats22Alice Wright 5Sophie Brown33Steel Cats22Alice Wright As colunas que pertencem à "tabela virtual" (a união das tabelas player e team) são mostradas em laranja; as colunas da tabela coach são mostradas em azul. Importante: quando unimos outra tabela, a condição de união deve incluir uma coluna que corresponda a uma coluna de uma das tabelas unidas anteriormente. Em nosso exemplo, a tabela coach é unida à tabela virtual usando o ID do técnico, que está presente na tabela coach e na tabela team tabela. Portanto, ele estava presente na "tabela virtual". Você pode imaginar que as tabelas unidas são "vinculadas" umas às outras com condições de união: É claro que não precisamos exibir todas as colunas da tabela unida. Nas consultas JOIN, geralmente especificamos quais colunas gostaríamos de ver. Observe que fizemos isso na consulta de exemplo acima: somente o nome do jogador, o nome do time e o nome do técnico foram exibidos. Tabelas de junção Uma tabela de junção é uma tabela que vincula duas ou mais tabelas. Muitas junções de várias tabelas envolvem o uso de uma tabela de junção. Parece vago? Vamos ver isso em ação. Imagine que você tenha as tabelas author e book. Um autor pode ter escrito muitos livros e um livro pode ter muitos autores. Para modelar esse relacionamento (que chamamos de relacionamento muitos-para-muitos), precisamos de uma terceira tabela: author_book. O único objetivo dessa tabela é conectar as tabelas author e book juntas. A tabela author_book é um exemplo de uma tabela de junção. Digamos que tenhamos os seguintes dados em nossas tabelas: author idname 1Sarah Green 2Martin Davis 3Steve Johnson book idname 1The Translucent Door 2Whisper of Dawn 3To Catch a Dream author_book author_idbook_id 11 21 12 32 23 Se você quiser unir as tabelas author e book você também deve usar a tabela de junção author_book. Por exemplo, para listar todos os autores e seus livros, você pode escrever uma consulta como esta: SELECT author.name, book.name FROM author JOIN author_book ON author.id = author_book.author_id JOIN book ON book.id = author_book.book_id ORDER BY author.name; Primeiro, a tabela author_book é unida à tabela author para formar uma "tabela virtual". Em seguida, a tabela book é unida à "tabela virtual". Ao unir tabelas vinculadas por uma tabela de junção, certifique-se de unir as tabelas que não são de junção à tabela de junção. Em nosso exemplo, author é unida com author_book. Então book também é unida. Se você tiver uma tabela de junção em seu banco de dados, as junções envolvendo essas tabelas geralmente envolverão três ou mais tabelas. O resultado da consulta terá a seguinte aparência. Não vemos nenhuma das colunas da tabela de junção no resultado, mas a união é essencial para que a consulta funcione corretamente: author.namebook.name Sarah GreenThe Translucent Door Martin DavisThe Translucent Door Sarah GreenWhisper of Dawn Steve JohnsonWhisper of Dawn Martin DavisTo Catch a Dream Uma tabela de junção com colunas adicionais No exemplo acima, as únicas colunas presentes na tabela de junção eram as colunas que faziam referência a outras tabelas. No entanto, esse não precisa ser o caso! A tabela de junção também pode conter outros campos. Esses campos armazenam informações adicionais sobre a relação. Vamos dar uma olhada em um exemplo. Desta vez, temos as três tabelas a seguir: doctor, patient e appointment. Você consegue adivinhar qual tabela é a tabela de junção aqui? Você está certo! A tabela de junção é a tabela appointment tabela. Ela conecta os médicos aos seus pacientes para criar consultas. Entretanto, a tabela appointment também precisa de colunas adicionais, como data e hora da consulta. Digamos que tenhamos os seguintes dados em nossas tabelas: doctor idname 1Ann Johnson 2Marlene Smith 3John West patient idname 1Mary Brown 2Sally Rodgers 3Mark Jackson appointment iddoctor_idpatient_iddatetime 11116/04/20238:00 21316/04/20239:00 32217/04/20238:00 42117/04/20239:00 53317/04/202316:00 Agora, vamos criar uma consulta que ajudará os médicos a gerenciar sua agenda: para cada médico, gostaríamos de ver todas as datas e horários de suas consultas, além do nome do paciente relevante. Você pode obter todas essas informações usando a seguinte consulta: SELECT doctor.name, appointment.date, appointment.time, patient.name FROM doctor JOIN appointment ON doctor.id = appointment.doctor_id JOIN patient ON appointment.patient_id = patient.id; Primeiro, a tabela appointment é unida à tabela doctor para formar uma "tabela virtual". Em seguida, a tabela patient é unida à "tabela virtual" fazendo referência à tabela de junção appointment. O resultado da consulta teria a seguinte aparência: doctor.nameappointment.dateappointment.timepatient.name Ann Johnson16/04/20238:00Mary Brown Ann Johnson16/04/20239:00Mark Jackson Marlene Smith17/04/20238:00Sally Rodgers Marlene Smith17/04/20239:00Mary Brown John West17/04/202316:00Mark Jackson Uma tabela de junção de 3 vias As tabelas de junção também podem vincular três ou mais tabelas. Por exemplo, imagine que um médico trabalhe em vários locais de clínicas. Ao agendar uma consulta, você é designado a um médico, mas também precisa escolher a clínica onde a consulta será realizada. Portanto, nossa tabela appointment agora vincularia três tabelas: doctor, patient, e clinic. Nesse cenário, muitas consultas exigirão a união das quatro tabelas. Em algumas situações, as tabelas de junção podem vincular ainda mais tabelas. Vamos unir algumas tabelas! Bom trabalho! Você acabou de aprender a usar vários JOINs em uma consulta SQL. Vamos resumir o que acabamos de aprender: Um JOIN de três tabelas é um JOIN de duas tabelas com outra junção. O JOIN de duas tabelas forma uma "tabela virtual" à qual a outra tabela é unida. A condição de união geralmente é uma igualdade entre algumas colunas de uma tabela que compartilham valores com colunas da outra tabela. Ao unir mais de duas tabelas, na maioria dos casos, você precisará garantir que a condição de união seja "vinculada" às tabelas que já foram unidas. Uma tabela de junção é uma tabela que vincula duas ou mais tabelas fazendo referência aos IDs das tabelas relevantes. Quando uma tabela de junção está envolvida, você provavelmente precisará usar uma união de várias tabelas. Se estiver curioso para saber mais sobre Cláusulas JOIN em SQL, dê uma olhada nestes artigos em nosso blog: Aprenda algumas dicas sobre como praticar Cláusulas JOIN em SQL. Descubra exemplos de Cláusulas JOIN em SQL com explicações detalhadas. Entenda como funciona o inner SQL JOIN. E para praticar um pouco mais, lembre-se de conferir nosso Cláusulas JOIN em SQL curso interativo! Tags: sql joins