20th Jul 2022 5 minutos de leitura Como unir duas tabelas por várias colunas em SQL Kateryna Koidan sql aprender sql sql joins Índice Unindo duas tabelas em várias colunas Exemplo 1: SQL JOIN by Two Columns Exemplo 2: SQL JOIN por Três Colunas Vamos praticar Cláusulas JOIN em SQL por Múltiplas Colunas! O SQL JOIN é uma ferramenta importante para combinar informações de várias tabelas. Na maioria das vezes, você estará unindo tabelas com base em uma chave primária de uma tabela e uma chave estrangeira de outra tabela. No entanto, também é frequente que você precise unir tabelas por duas ou mais colunas. Neste artigo, discutirei por que você quer unir tabelas por várias colunas e como fazer isso em SQL. Unir tabelas por apenas uma coluna não funciona em alguns cenários. Por exemplo, você pode encontrar casos em que não há uma coluna na tabela que identifique de forma única as linhas. Ou as tabelas que você deseja unir podem não ter apenas uma coluna em comum para usar para unir. Em situações como estas, você pode precisar usar várias colunas para entrar nas tabelas - por exemplo, o primeiro e o último nome, ou o número do pedido e o ano se a numeração do pedido for reiniciada a cada ano. Vamos ver alguns exemplos para entender como isto funciona na prática. Unindo duas tabelas em várias colunas Imaginemos que administramos uma rede de jardins de infância. Em nosso banco de dados, temos as seguintes tabelas: students, onde temos informações sobre cada aluno, como o nome, o jardim de infância que ele ou ela freqüentou, a classe, o ano de formatura e o professor. teachers, onde temos o nome e o nível de instrução de cada professor. classesA escola, onde temos informações sobre cada classe, tais como o nome do jardim de infância, a classe, o ano de formatura e o nome da sala de aula. students idfirst_namelast_namekindergartengraduation_yearclassteacher_first_nameteacher_last_name 1MaryJonesSunshine2021AIsabellaLopez 2JohnSmithLove & Learn2020BMiaGonzalez 3MarkAndersonButterfly2020BSophiaStevenson 4StevenMooreButterfly2021CMariaStuart 5DianaMillerButterfly2021CMariaStuart 6AnnaDavisSunshine2021AEmmaGrey 7HellenBrownSunshine2020BOliviaTaylor 8GracyLeeLove & Learn2020ACharlotteJohnson 9SaraGarciaLove & Learn2021BJasmineHarris 10KateWilsonSunshine2019BOliviaTaylor teachers idfirst_namelast_nameeducation 101IsabellaLopezUndergraduate 102MariaStuartUndergraduate 103EmmaGreyGraduate 104OliviaTaylorGraduate 105CharlotteJohnsonGraduate 106MiaGonzalezUndergraduate 107SophiaStevensonUndergraduate 108JasmineHarrisUndergraduate classes idkindergartengraduation_yearclassclassroom 201Sunshine2019BIronman 202Butterfly2020BSun 203Love & Learn2020ALove 204Love & Learn2020BHappiness 205Sunshine2020AHulk 206Sunshine2020BSuperman 207Butterfly2021AGarden 208Butterfly2021BIsland 209Butterfly2021CSea 210Love & Learn2021ADream 211Love & Learn2021BLaugh 212Sunshine2021AIronman Você pode notar que nosso banco de dados não está perfeitamente organizado. Tipicamente, o students A tabela incluiria chaves estrangeiras como o ID do professor e o ID da classe, em vez de informações detalhadas sobre os professores e classes correspondentes. Entretanto, mesmo com os dados armazenados desta forma, podemos juntar as tabelas desde que cada tabela tenha um conjunto de colunas que identifique de forma única cada registro. Chegou a hora de algumas consultas SQL! Exemplo 1: SQL JOIN by Two Columns Em nosso primeiro exemplo, queremos saber o nível de instrução do professor para cada aluno. Para isso, precisamos combinar as informações das tabelas students e teachers. Infelizmente, não temos a coluna de identificação do professor no students mesa. No entanto, temos o primeiro e último nome do professor em ambas as mesas. Desde que não tenhamos professores com nomes completos idênticos, podemos juntar com segurança estas duas colunas. Aqui está a pergunta: SELECT s.first_name, s.last_name, s.teacher_first_name, s.teacher_last_name, t.education AS teacher_education FROM students s JOIN teachers t ON s.teacher_first_name = t.first_name AND s.teacher_last_name = t.last_name; Se você precisar de uma atualização na sintaxe SQL JOIN, confira esta grande folha de SQL JOIN Cheat Sheet. Observe as duas condições na cláusula ON, pois condicionamos em ambas (1) o primeiro nome da tabela de professores a ser igual ao primeiro nome do professor na tabela de alunos e (2) o sobrenome da tabela de professores a ser igual ao sobrenome do professor na tabela de alunos. Como você vê, para especificar duas condições, simplesmente colocamos ambas na cláusula ON usando a palavra-chave AND no meio. O resultado é o seguinte: first_namelast_nameteacher_first_nameteacher_last_nameteacher_education MaryJonesIsabellaLopezUndergraduate StevenMooreMariaStuartUndergraduate DianaMillerMariaStuartUndergraduate AnnaDavisEmmaGreyGraduate HellenBrownOliviaTaylorGraduate KateWilsonOliviaTaylorGraduate JohnSmithMiaGonzalezUndergraduate MarkAndersonSophiaStevensonUndergraduate GracyLeeCharlotteJohnsonGraduate SaraGarciaJasmineHarrisUndergraduate Parece bom! Vemos agora o nível de instrução correspondente do professor para cada aluno. Para obter mais prática com a união de tabelas em SQL, verifique esta Cláusulas JOIN em SQL curso. Exemplo 2: SQL JOIN por Três Colunas No exemplo anterior, vimos como unir duas mesas por duas condições. Podemos ter ainda mais condições, se necessário. Vamos ver como unir tabelas em SQL com três condições. Agora queremos saber o nome da sala de aula onde cada aluno tocou e estudou. As informações sobre a sala de aula estão disponíveis no classes mesa. Não temos a identificação da classe na tabela de students mesa. No entanto, temos ali três colunas que identificam de forma única uma classe quando combinadas: jardim de infância, graduation_year, class. As mesmas colunas estão presentes na tabela de classes mesa. Assim, vamos combinar students e classes usando três colunas: SELECT s.first_name, s.last_name, c.kindergarten, c.graduation_year, c.class, c.classroom FROM students s JOIN classes c ON s.kindergarten = c.kindergarten AND s.graduation_year = c.graduation_year AND s.class = c.class; Como você pode ver, unimos as tabelas usando as três condições colocadas na cláusula ON com as palavras-chave AND no meio. Aqui está a saída: first_namelast_namekindergartengraduation_yearclassclassroom MarkAndersonButterfly2020BSun JohnSmithLove & Learn2020BHappiness StevenMooreButterfly2021CSea MaryJonesSunshine2021AIronman GracyLeeLove & Learn2020ALove HellenBrownSunshine2020BSuperman DianaMillerButterfly2021CSea AnnaDavisSunshine2021AIronman SaraGarciaLove & Learn2021BIronman KateWilsonSunshine2019BLaugh O JOIN funcionou como pretendido! Agora temos a sala de aula correspondente para cada aluno. Se você quiser ver mais exemplos, confira este livro de receitas ao unir mesas por várias colunas. Vamos praticar Cláusulas JOIN em SQL por Múltiplas Colunas! O SQL JOIN é uma das ferramentas básicas para os analistas de dados que trabalham com SQL. Os bancos de dados relacionais são construídos de tal forma que os relatórios analíticos geralmente requerem a combinação de informações de várias tabelas. Você estará unindo tabelas, às vezes por uma coluna e outras vezes por duas ou mais colunas. Como você viu, unir tabelas por várias colunas é bastante simples em SQL. Mas se você quiser ter confiança no uso de SQL JOINs, praticar com conjuntos de dados do mundo real é um fator chave de sucesso. Recomendo começar com este curso interativo Cláusulas JOIN em SQL que inclui 93 desafios de codificação. Ele cobre os tipos mais comuns de junções como JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, e auto junções, assim como junções não-equi. Para obter ainda mais prática com SQL JOINs e outras ferramentas SQL básicas, considere o uso do SQL de A a Z pista. Inclui 7 cursos interativos que cobrem funções SQL padrão, relatórios SQL básicos, funções de janela, expressões comuns de tabela, consultas recursivas e muito mais. Obrigado pela leitura, e feliz aprendizado! Tags: sql aprender sql sql joins