20th Jul 2022 7 minutos de leitura Qual é a diferença entre ter várias tabelas de origem e usar juntas? Kateryna Koidan sql aprender sql joins Índice Juntando Tabelas através da listagem das mesmas de Unindo Tabelas usando a palavra-chave JOIN Por que usar a Nova Sintaxe para Juntar SQL? As condições de junção são separadas das condições de filtragem É mais fácil unir várias tabelas ESQUERDA / DIREITA / CUMPRIDADE DE USO são mais fáceis Junções acidentais de CROSS são evitadas É hora de aprender a nova sintaxe para Cláusulas JOIN em SQL! Qual é a sua abordagem para juntar tabelas em SQL? Neste artigo, discutimos duas abordagens e explicamos por que muitos desenvolvedores de SQL têm uma preferência definida por JOIN. Você prefere listar várias tabelas em FROM e usar WHERE para definir as condições de junção? Ou você usa a palavra-chave JOIN? SQL suporta ambas, mas há diferenças significativas entre elas. Vamos analisar cada uma delas em detalhes e depois discutir por que o JOIN é geralmente preferido. Juntando Tabelas através da listagem das mesmas de Digamos que administramos uma loja de brinquedos e temos duas tabelas de banco de dados às quais queremos aderir: toys e sales. Brinquedos idnamebrandprice 1BumblebeeTransformers14.99 2Optimus PrimeTransformers19.99 3Lightning McQueenDisney Cars23.97 4RamoneDisney Cars20.99 5Wonder WomanBarbie39.99 6Princess LeiaBarbie99.99 7Wizard of Oz: GlindaBarbie43.95 Vendas idtoy_idemployee_iddatequantity 1532020-07-011 2112020-07-011 3312020-07-021 4632020-07-031 5232020-07-031 Podemos simplesmente listar ambas as tabelas na cláusula FROM e declarar na cláusula WHERE que o id do toy deve corresponder à tabela toy_id do sales mesa: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t, sales s WHERE t.id = s.toy_id; Vamos obter o seguinte resultado: idnamebrandpricequantitydate 1BumblebeeTransformers14.9912020-07-01 2Optimus PrimeTransformers19.9912020-07-03 3Lightning McQueenDisney Cars23.9712020-07-02 5Wonder WomanBarbie39.9912020-07-01 6Princess LeiaBarbie99.9912020-07-03 Tudo funcionou como pretendido - juntamos duas mesas e obtivemos os resultados que esperávamos. Esta é definitivamente uma solução que funciona para unir mesas em SQL. Entretanto, ela usa uma sintaxe antiga que era comum antes do padrão SQL-92 introduzir a palavra-chave JOIN. Vamos agora ver como podemos obter o mesmo resultado usando uma abordagem moderna para unir tabelas. Unindo Tabelas usando a palavra-chave JOIN Podemos usar a seguinte consulta com a palavra-chave JOIN para fazer a mesma coisa: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t JOIN sales s ON t.id = s.toy_id; Esta sintaxe foi introduzida no padrão SQL-92. Aqui, temos apenas uma tabela na cláusula FROM; a tabela que queremos juntar está listada na cláusula JOIN. Depois, temos a palavra-chave ON para especificar as colunas a serem usadas para unir estas tabelas. O resultado desta consulta é o mesmo que o anterior. No entanto, esta abordagem tem uma série de vantagens que a tornam mais prevalecente entre os praticantes de SQL. Se você preferir usar a antiga sintaxe para unir tabelas, verifique os seguintes argumentos. Eles podem fazer com que você mude de idéia. Por que usar a Nova Sintaxe para Juntar SQL? Vamos começar esclarecendo que , em termos de desempenho, não há diferença entre as duas sintaxes. O uso da palavra-chave JOIN não é apenas um padrão formal hoje em dia, é também uma prática comum entre os usuários de SQL. Então, quais são os benefícios de usar a cláusula JOIN? As condições de junção são separadas das condições de filtragem Quando você usa a sintaxe antiga, suas condições de adesão e condições de filtragem são fisicamente agrupadas na cláusula WHERE. Isto pode causar alguma confusão. Por exemplo, digamos que queremos ver apenas as vendas a partir de 3 de julho. Precisaremos acrescentar mais uma condição à cláusula ONDE: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t, sales s WHERE t.id = s.toy_id AND s.date = '2020-07-03'; Agora temos duas condições em ONDE, mas apenas uma delas é uma verdadeira condição de filtragem. A outra é usada apenas para especificar as colunas nas quais se devem juntar as tabelas. Com a palavra-chave JOIN, as condições de união são separadas das condições de filtragem: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t JOIN sales s ON t.id = s.toy_id WHERE s.date = '2020-07-03'; Aqui, especificamos a condição de junção em ON e usamos WHERE para filtrar os resultados. Ambas as consultas produzirão o mesmo resultado, mas a nova sintaxe deixa claro onde se está unindo as tabelas e onde se está filtrando os resultados. É mais fácil unir várias tabelas Muitas vezes, você precisará unir várias tabelas com SQL. Por exemplo, digamos que queremos unir a employees mesa para o toys e sales tabelas para que saibamos quem vendeu cada brinquedo. Empregados idname 1Rob Stevens 2Jane White 3Sofia Clark Com a velha sintaxe, teríamos a seguinte pergunta: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date, e.name AS employee FROM toys t, sales s, employees e WHERE t.id = s.toy_id AND e.id = s.employee_id; Para unir as mesmas três tabelas com a sintaxe JOIN, usaríamos esta consulta: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date, e.name AS employee FROM toys t JOIN sales s ON t.id = s.toy_id JOIN employees e ON e.id = s.employee_id; O resultado é o mesmo: idnamebrandpricequantitydateemployee 1BumblebeeTransformers14.9912020-07-01Rob Stevens 2Optimus PrimeTransformers19.9912020-07-03Sofia Clark 3Lightning McQueenDisney Cars23.9712020-07-02Rob Stevens 5Wonder WomanBarbie39.9912020-07-01Sofia Clark 6Princess LeiaBarbie99.9912020-07-03Sofia Clark A "cadeia" de tabelas que queremos juntar é mais visível na nova sintaxe, onde primeiro juntamos duas tabelas em colunas específicas e depois juntamos a terceira tabela usando outra condição de junção. Com a sintaxe antiga, temos todas as três tabelas listadas juntas em FROM, e depois ambas as condições de junção especificadas (em qualquer ordem) em WHERE. Qual condição corresponde a qual juntar, especialmente se precisarmos juntar mais de três tabelas, rapidamente se torna confusa nesta sintaxe. ESQUERDA / DIREITA / CUMPRIDADE DE USO são mais fáceis A sintaxe JOIN torna todos os tipos de uniões externas muito simples. Você pode fazer uniões à esquerda (exterior), à direita (exterior) ou uniões completas (exterior) simplesmente usando as respectivas palavras-chave (LEFT JOIN, RIGHT JOIN, ou FULL JOIN). Digamos que queremos nos unir à toys e sales mesas para que tenhamos todos os brinquedos expostos no resultado, mesmo que não houvesse vendas para um brinquedo durante o período determinado. Você pode fazer isto juntando-se facilmente em qualquer banco de dados simplesmente usando o LEFT JOIN: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.date FROM toys t LEFT JOIN sales s ON t.id = s.toy_id; O resultado incluirá todos os brinquedos e as informações de vendas correspondentes, quando aplicável: idnamebrandpricequantitydate 5Wonder WomanBarbie39.9912020-07-01 1BumblebeeTransformers14.9912020-07-01 3Lightning McQueenDisney Cars23.9712020-07-02 6Princess LeiaBarbie99.9912020-07-03 2Optimus PrimeTransformers19.9912020-07-03 4RamoneDisney Cars20.99NULLNULL 7Wizard of Oz: GlindaBarbie43.95NULLNULL Se você é novo em LEFT JOINs, leia este guia abrangente em várias mesas à esquerda. E quanto à antiga sintaxe? Isso é complicado. Alguns bancos de dados podem permitir certos truques para mesas de junção à esquerda sem usar a palavra-chave JOIN, mas não há uma solução consistente que funcione em todos os casos. Por exemplo, no Oracle você pode usar o operador (+) para fazer uma junção à esquerda: SELECT t.id, t.name, t.brand, t.price, s.quantity, s.day FROM toys t, sales s WHERE t.id = s.toy_id (+); Entretanto, esta sintaxe não funciona em outros bancos de dados. Junções acidentais de CROSS são evitadas Outra questão comum com a união de mesas com FROM é o acidental CROSS JOIN. Se você omitir uma condição de união em ONDE, você terá todas as linhas da primeira tabela combinadas com todas as linhas da segunda tabela. Assim, o número de linhas no conjunto de resultados será a multiplicação do número de linhas em cada tabela. Tal erro pode ser complicado de detectar e debugar. Ao mesmo tempo, quando você usa o padrão SQL-92 para juntar tabelas, você receberá um erro de sintaxe se omitir a condição de junção. É claro que você pode cruzar suas tabelas na nova sintaxe, mas somente se você usar explicitamente a palavra-chave correspondente (CROSS JOIN). É hora de aprender a nova sintaxe para Cláusulas JOIN em SQL! A maioria dos praticantes de SQL concorda que a nova sintaxe é mais legível uma vez que você se acostume com ela. Esperamos que você também esteja convencido de que a abordagem moderna para unir tabelas em SQL vale a sua atenção. LearnSQL oferece um curso abrangente em Cláusulas JOIN em SQL que inclui 93 exercícios interativos. Você terá a oportunidade de praticar as uniões internas, todos os tipos de uniões externas, uniões não-equi e uniões de si mesmo. Além dos exercícios, você pode achar útil atualizar seus conhecimentos sobre Cláusulas JOIN em SQL com nossos guias para iniciantes: Como aprender Cláusulas JOIN em SQL Como praticar Cláusulas JOIN em SQL Exemplos de aprendizagem de JOINs com o mundo real SQL Feliz aprendizagem! Tags: sql aprender sql joins