12th Sep 2022 7 minutos de leitura É Possível Juntar Tabelas Sem uma Coluna Comum? Kateryna Koidan sql aprender sql joins Índice Quando é Necessário Unir Tabelas sem uma Coluna Comum? Conhecendo os Dados Como Juntar Duas Tabelas Sem uma Coluna Comum Usando a sintaxe "FROM TABELA1, TABELA2". Usando o operador CROSS JOIN Usando UNION ou UNION ALL Hora de praticar o uso de CROSS JOINs e UNIONs! Sim, é possível! Respondendo de forma mais completa, sim, há algumas maneiras de juntar duas tabelas sem uma coluna comum, incluindo CROSS JOIN (produto cartesiano) e UNION. Embora este último não seja tecnicamente um JOIN, ele pode ser útil para unir tabelas em SQL. Neste artigo, vou apresentar diferentes soluções com exemplos. Quando é Necessário Unir Tabelas sem uma Coluna Comum? Quem está começando em SQL normalmente é introduzido aos JOINs equi padrão, nos quais duas tabelas são unidas por uma coluna comum. Entretanto, no mundo real, um analista de dados geralmente precisa lidar com tarefas mais diversas e complexas. Por exemplo, há muitos casos em que é preciso usar JOINs não-equi, quando duas tabelas são unidas usando operadores condicionais que não o sinal de igualdade. Se você não está familiarizado com este tipo de junção, confira nosso curso Cláusulas JOIN em SQL. Ele oferece mais de 90 exercícios práticos em diferentes tipos de JOINs. Em outros casos, você pode precisar obter todas as combinações entre as linhas das duas tabelas. Se você administra um restaurante, por exemplo, pode precisar ver todas as combinações possíveis entre os vinhos da sua carta de vinhos e os pratos principais do seu cardápio. Ou então, imagine que as informações sobre seus fornecedores estejam armazenadas em diferentes tabelas. Elas podem até ter nomes de colunas diferentes por tipo de produto (ou seja, vinhos, sucos, frutas, etc.). Talvez você queira combinar todas as informações para gerar uma única tabela com todos os fornecedores. Nesses casos, você pode precisar juntar duas ou mais tabelas sem precisar de uma coluna comum. Parece uma tarefa bem simples de se resolver usando SQL, e é mesmo! Vou sugerir algumas soluções neste guia. Antes disso, porém, vamos explorar os dados que usaremos nos nossos exemplos. Conhecendo os Dados Somos donos de um restaurante e temos dados relevantes armazenados em várias tabelas, entre as quais estão vinho e prato_principal. A tabela vinho contém o ID do vinho, o nome do vinho, o ID do fornecedor e o preço: idnomeid_fornecedorpreco 1Merlot5007.95 2House4002.45 3Sangiovese6005.20 A tabela prato_principal contém, para cada prato, o ID do prato principal, o nome, o ID do fornecedor principal para este prato e o preço: prato_principal idnomeid_fornecedor_principalpreco 1Salmão com Cardamomo e Maple Syrup20019.99 2Macarrão com Queijo1008.99 3Frango Teriyaki Assado30011.99 4Filé Mignon ao Molho Gorgonzola40015.99 Vejamos como podemos unir estas tabelas para obter os resultados desejados. Como Juntar Duas Tabelas Sem uma Coluna Comum No primeiro exemplo, queremos ver todas as combinações possíveis de vinhos e pratos principais do nosso cardápio. Para isso, existem pelo menos duas abordagens para unir as tabelas vinho e prato_principal gerando o resultado que queremos. Usando a sintaxe "FROM TABELA1, TABELA2". Uma maneira de unir duas tabelas sem uma coluna comum é usar uma sintaxe obsoleta para juntar tabelas. Com esta sintaxe, nós simplesmente listamos as tabelas que queremos juntar na cláusula FROM e depois usamos uma cláusula WHERE para adicionar condições de junção, se necessário. Se o que queremos é cada combinação entre linhas de duas tabelas, não precisamos incluir condições de junção. Podemos usar uma consulta como esta: SELECT v.nome AS vinho, p.nome AS prato_principal FROM vinho v, prato_principal p; A consulta retornará um produto cartesiano (um Cross Join), onde o número total de linhas do conjunto de resultados será igual ao número de linhas da primeira tabela multiplicado pelo número de linhas da segunda tabela. vinhoprato_principal MerlotSalmão com Cardamomo e Maple Syrup HouseSalmão com Cardamomo e Maple Syrup SangioveseSalmão com Cardamomo e Maple Syrup MerlotMacarrão com Queijo HouseMacarrão com Queijo SangioveseMacarrão com Queijo MerlotFrango Teriyaki Assado HouseFrango Teriyaki Assado SangioveseFrango Teriyaki Assado MerlotFilé Mignon ao Molho Gorgonzola HouseFilé Mignon ao Molho Gorgonzola SangioveseFilé Mignon ao Molho Gorgonzola Conseguimos o resultado que queríamos. Esta é uma solução viável para unir duas tabelas quando o objetivo é obter um conjunto de resultados com todas as combinações possíveis das linhas. No entanto, esta não é a melhor abordagem. Os profissionais em SQL preferem usar a palavra-chave CROSS JOIN neste tipo de operação. Ela deixa claro que estamos realizando uma junção cruzada intencionalmente, e não por termos omitido acidentalmente a condição de junção WHERE, o que pode acontecer ao se utilizar a sintaxe obsoleta para juntar tabelas. Leia mais sobre os benefícios da nova sintaxe para unir tabelas em nosso artigo Qual a Diferença Entre Ter Várias Tabelas com FROM e Usando JOINs Usando o operador CROSS JOIN Como você já deve ter imaginado, a segunda abordagem para obter todas as combinações possíveis entre linhas de duas tabelas é usar o operador CROSS JOIN: SELECT v.nome AS vinho, p.nome AS prato_principal FROM vinho v CROSS JOIN prato_principal p; Esta consulta produz exatamente o mesmo resultado que vimos anteriormente. No entanto, esta sintaxe é preferível, pois indica claramente a intenção de realizar um CROSS JOIN e é mais legível para outros usuários que venham a ler o seu código SQL. Saiba mais sobre Cross Joins com o nosso Guia Ilustrado de SQL CROSS JOIN. Usando UNION ou UNION ALL Há outros casos em que podemos precisar juntar duas tabelas sem uma coluna comum. Como no exemplo anterior, você pode querer compilar todas as informações de fornecedores armazenadas em várias tabelas. Neste caso, você não quer um produto cartesiano. Então, como juntar as tabelas? Neste caso, você deve usar um UNION para combinar as informações das diferentes tabelas. Tecnicamente, não se trata de uma junção, mas pode ser muito útil para combinar linhas de várias tabelas, como no exemplo abaixo. Simplificando, JOINs combinam os dados inserindo as colunas de uma tabela ao lado das colunas de outra tabela. Em contraste, UNIONs combinam os dados anexando as linhas ao lado das linhas de outra tabela. Portanto, se quisermos gerar uma lista combinada das identificações dos fornecedores a partir das tabelas vinho e prato_principal, podemos usar a seguinte consulta SQL: SELECT v.id_fornecedor FROM vinho v UNION SELECT p.id_fornecedor_principal FROM prato_principal p ORDER BY id_fornecedor; Aqui, começamos selecionando os IDs de fornecedores da tabela vinho (coluna id_fornecedor) e da tabela prato_principal (coluna id_fornecedor_principal) separadamente. Depois, combinamos estas linhas usando a palavra-chave UNION. Finalmente, classificamos o resultado da forma que acharmos melhor: id_fornecedor 100 200 300 400 500 600 Observe o seguinte ao usar UNION em SQL: Todas as instruções SELECT devem listar o mesmo número de colunas. As colunas correspondentes devem ter o mesmo tipo de dados. As colunas correspondentes podem ter nomes diferentes, como é o caso do nosso exemplo. Por padrão, o nome da coluna exibida no conjunto de resultados será tirado da primeira declaração SELECT. Se necessário, você pode definir nomes para as colunas resultantes usando a palavra-chave AS. Observe que as colunas de tabelas diferentes devem ser nomeadas na mesma ordem para que elas correspondam corretamente. O operador UNION remove as duplicatas do conjunto de resultados. Como você deve ter notado, o id_fornecedor 400 estava em ambas as tabelas, mas aparece apenas uma vez no conjunto de resultados. Se você não quiser que as duplicatas sejam removidas, use o operador UNION ALL: SELECT v.id_fornecedor FROM vinho v UNION ALL SELECT p.id_fornecedor_principal FROM prato_principal p ORDER BY 1; O resultado desta consulta incluirá o id_fornecedor de número 400 duas vezes: id_fornecedor 100 200 300 400 400 500 600 Se nem CROSS JOIN nem UNION se aplicarem ao seu caso para juntar duas tabelas sem uma coluna comum, confira este artigo com exemplos de JOINs não-equi, onde você encontrará alguns exemplos relevantes. Hora de praticar o uso de CROSS JOINs e UNIONs! Agora que você já aprendeu sobre a união de tabelas sem uma coluna comum, está preparado para responder à pergunta "Como juntar duas tabelas sem uma coluna em comum?", muito comum em entrevistas para cargos que utilizam SQL! Se você quiser saber mais sobre JOINs, confira o vídeo Introdução sobre SQL JOIN da nossa série "We Learn SQL" no YouTube. Experiemente também o guia da LearnSQL.com.br sobre as melhores maneiras de aprender Cláusulas JOIN em SQL. Entretanto, você já deve saber que o caminho mais curto para se tornar um especialista em SQL é através de muita prática escrevendo consultas. A LearnSQL.com.br oferece um curso completo sobre Cláusulas JOIN em SQL com 93 exercícios interativos. Neste curso, você poderá praticar todos os tipos de exercícios básicos usando JOINs, incluindo CROSS JOINs, Self Join, JOIN não-equi e a junção de várias tabelas. Bons estudos! Tags: sql aprender sql joins