21st Jul 2022 8 minutos de leitura Como unir tabelas em SQL sem usar JOINs Tihomir Babic fact table data warehouse Índice O Primeiro Método: DE E ONDE Sintaxe Exemplo Consulta Resultado: O segundo método: UNIÃO/UNIÃO TODOS Sintaxe Exemplo Consulta: UNIÃO Resultado: UNIÃO Consulta: UNIÃO TODOS Resultado: UNIÃO TUDO Sim, as mesas podem ser unidas sem a palavra-chave JOIN Aprenda todas as Formas Possíveis de Junção de Tabelas em SQL Veja como você pode combinar tabelas sem a ENCONTRE palavra-chave. Parece que isso não deveria ser possível: juntar tabelas em SQL sem usar a palavra-chave JOIN. Mas usar a palavra-chave JOIN não é a única maneira de unir tabelas em SQL. Este artigo mostrará dois métodos adicionais para unir tabelas. Nenhum deles requer a palavra-chave JOIN para funcionar. Eles são: Usando uma vírgula entre os nomes das tabelas na cláusula FROM e especificando a condição de junção em um WHERE Usando UNION/UNION ALL. Presumo que você saiba como funciona o JOINs. Se você precisar, aqui está uma atualização sobre como juntar mesas usando o JOINs. O Primeiro Método: DE E ONDE Sintaxe A sintaxe para este método de juntar tabelas sem utilizar JOINs é: SELECT * FROM , WHERE Você pode substituir a palavra-chave JOIN por uma vírgula na cláusula FROM. O que você faz a seguir? Não há nenhuma palavra-chave ON para você declarar a condição de junção como haveria ao usar JOIN, por exemplo, em quais duas colunas você quer juntar as tabelas. Neste método, você simplesmente usa uma cláusula WHERE para fazer isso. Este método faz exatamente o mesmo que: SELECT * FROM <table1> JOIN <table2> ON <condition> Vamos ver como ele funciona na prática. Exemplo Neste exemplo, preciso encontrar o nome do artista, os álbuns que ele gravou e os anos em que eles foram gravados, para cada artista. Para mostrar como este método funciona, vou usar duas mesas. A primeira é artist: idartist_name 1Paul Simon 2Marvin Gaye 3Bettye LaVette 4Joni Mitchell 5Sly and the Family Stone É uma mesa simples contendo vários de meus músicos favoritos. A outra mesa, album, parece que é assim: idalbum_nameyear_recordedartist_id 1Dance to the Music19685 2Small Talk19745 3Stranger to Stranger20161 4I've Got My Own Hell to Raise20053 5Blues19714 6Court and Spark19744 7A Tribute to the Great Nat "King" Cole19652 8Graceland19861 9Still Crazy After All These Years19751 10In the Blue Light20181 11There's a Riot Goin' On19715 12The Scene of the Crime20073 13Mingus19794 14What's Going On19712 15Here, My Dear19782 Estes são os álbuns gravados pelos músicos da primeira mesa. Consulta A consulta para unir estas tabelas sem uma palavra-chave JOIN se parece com isto: SELECT artist_name, album_name, year_recorded FROM artist, album WHERE artist.id = album.artist_id; Em primeiro lugar, eu especifico as colunas que eu quero ver no meu resultado: artist_name, album_name, e year_recorded. Elas vêm de um artist ou album. Eu junto estas duas tabelas simplesmente listando-as na cláusula FROM e separando-as com uma vírgula. A cláusula WHERE é geralmente usada para filtrar os resultados. Posso usá-la para filtrar este resultado de modo que mostre todos os dados onde a coluna id da tabela artist é igual à coluna artist_id da tabela album. Você pode ver a condição em ON nesta consulta é a mesma que seria após a palavra-chave ON ao usar JOIN: artist.id = album.artist_id. A consulta equivalente com uma palavra-chave JOIN é: SELECT artist_name, album_name, year_recorded FROM artist JOIN album ON artist.id = album.artist_id; Resultado: Ambas as consultas retornam o mesmo resultado: artist_namealbum_nameyear_recorded Paul SimonIn the Blue Light2018 Paul SimonStill Crazy After All These Years1975 Paul SimonGraceland1986 Paul SimonStranger to Stranger2016 Marvin GayeHere, My Dear1978 Marvin GayeWhat's Going On1971 Marvin GayeA Tribute to the Great Nat "King" Cole1965 Bettye LaVetteThe Scene of the Crime2007 Bettye LaVetteI've Got My Own Hell to Raise2005 Joni MitchellMingus1979 Joni MitchellCourt and Spark1974 Joni MitchellBlues1971 Sly and the Family StoneThere's a Riot Goin' On1971 Sly and the Family StoneSmall Talk1974 Sly and the Family StoneDance to the Music1968 Você vê o resultado combina dados das duas tabelas iniciais. Posso ver agora, por exemplo, Paul Simon gravou o álbum "In the Blue Light" em 2018. Se você não confia em minha consulta, você sempre pode verificar na Wikipedia! Este método usa uma coluna comum para juntar tabelas. Lembre-se de que você também pode unir mesas que não têm uma coluna comum. O segundo método: UNIÃO/UNIÃO TODOS Sintaxe SELECT , , … FROM UNION / UNION ALL SELECT , , … FROM Tanto UNION quanto UNION ALL são usados para colar o resultado da primeira consulta com o da segunda consulta. Basta escrever duas declarações SELECT e escrever UNION ou UNION ALL entre elas. Mas qual é a diferença entre essas duas palavras-chave SQL? Relembrar: UNION remove as linhas duplicadas da consulta e as mostra apenas uma vez. UNION ALL mostra todas as linhas de ambas as tabelas, não importa quantas duplicatas existam. Para que ambas UNION e UNION ALL funcionem, todas as colunas das duas declarações SELECT precisam corresponder. Isto significa que o número de colunas selecionadas deve ser o mesmo, e os tipos de dados dessas colunas devem ser os mesmos. Estes dois operadores são chamados de operadores de conjunto. Leia este artigo para saber mais sobre estes e outros operadores de conjunto. Exemplo Temos duas tabelas neste exemplo, também. A primeira é denominada customer: idfirst_namelast_name 1JimmyHellas 2FrancoisJambony 3RenataTraviata 4CarmenNaburana 5SteveInicks 6ElviraSamson 7AlpaCino 8RosaSparks 9BernardineSane 10BertRandrussell Ela contém uma lista de meus clientes. A segunda tabela é supplier: idfirst_namelast_name 1ArpadPolanski 2BillyVan Persie 3SteveInicks 4Jean-ClaudeZaandam 5EminaArkayeva 6BoMilosz 7JanWrangler 8HeinrichStroopwafel 9HerringoStarr 10JosephineMatijevic 11AlpaCino 12FlintWestwood 13DesPaulmond 14WilmaJackson 15KatrinVerson 16BertRandrussell 17CarmenNaburana 18JimmyTulp 19LuisWolf 20MirandaFanucci Se você inspecionar estas mesas um pouco mais de perto, você verá que algumas pessoas estão em ambas as mesas. Por exemplo, olhe para Steve Inicks - isto significa que Steve é, junto com alguns outros, tanto meu cliente (ele compra alguns serviços da minha empresa) quanto meu fornecedor (ele fornece alguns serviços para mim). Agora, vamos ver como é quando eu me junto a estas mesas com UNION ou UNION ALL. Consulta: UNIÃO Este método de combinar tabelas sem utilizar a palavra-chave JOIN traduz a seguinte consulta: SELECT first_name, last_name FROM customer UNION SELECT first_name, last_name FROM supplier; A primeira declaração SELECT seleciona as colunas first_name e last_name da tabela customer. A segunda declaração SELECT faz o mesmo, mas a partir da tabela supplier. Eu uso UNION para juntar os resultados dessas duas consultas. Funciona: há duas colunas em ambas as declarações SELECT, e elas são do mesmo tipo de dados. Elas são até denominadas da mesma forma, embora isso não seja necessário para que a consulta funcione. Resultado: UNIÃO Executando a consulta você obtém isto: first_namelast_name AlpaArpad CinoBilly JosephineMatijevic LuisWolf Jean-ClaudeZaandam SteveInicks BillyVan Persie EminaArkayeva MirandaFanucci BoMilosz JimmyHellas FrancoisJambony RosaSparks KatrinVerson JanWrangler BernardineSane HeinrichStroopwafel ElviraSamson RenataTraviata JimmyTulp WilmaJackson ArpadPolanski BertRandrussell DesPaulmond FlintWestwood CarmenNaburana HerringoStarr Como mencionei, é uma combinação de todos os dados de ambas as tabelas. Vamos verificar se há duplicatas. Já mencionei que Steve Inicks está em ambas customer e supplier tabelas. No resultado da consulta, você o encontra apenas uma vez. Marquei a fila onde ele está. Vamos ver como isto é diferente de UNION ALL. Consulta: UNIÃO TODOS A pergunta neste caso é: SELECT first_name, last_name FROM customer UNION ALL SELECT first_name, last_name FROM supplier; Como você pode ver, isto não é muito diferente. Na verdade, é a mesma consulta, exceto que ela tem UNION ALL em vez de UNION. No entanto, os resultados são diferentes. Vamos dar uma olhada. Resultado: UNIÃO TUDO O resultado da consulta é: first_namelast_name JimmyHellas FrancoisJambony RenataTraviata CarmenNaburana SteveInicks ElviraSamson AlpaCino RosaSparks BernardineSane BertRandrussell ArpadPolanski BillyVan Persie SteveInicks Jean-ClaudeZaandam EminaArkayeva BoMilosz JanWrangler HeinrichStroopwafel HerringoStarr JosephineMatijevic AlpaCino FlintWestwood DesPaulmond WilmaJackson KatrinVerson BertRandrussell CarmenNaburana JimmyTulp LuisWolf MirandaFanucci Conhecendo Steve Inicks aparece como cliente e fornecedor, vamos verificar quantas vezes ele aparece no resultado. Ele está lá duas vezes, ambas marcadas em azul. Também marquei três outros que aparecem duas vezes: Alpa Cino, Bert Randrussell, e Carmen Naburana. Aqui está outro exemplo de utilização de UNION e UNION ALL. Sim, as mesas podem ser unidas sem a palavra-chave JOIN Como você acabou de ver, nem sempre é necessário usar a palavra-chave JOIN para combinar duas tabelas em SQL. Você pode substituí-la por uma vírgula na cláusula FROM e depois declarar sua condição de adesão na cláusula WHERE. O outro método é escrever duas declarações em SELECT. O resultado de cada uma delas é uma tabela, então simplesmente use UNION ou UNION ALL para combinar as duas. Tenha em mente que isto só funciona se suas declarações SELECT tiverem o mesmo número de colunas e os mesmos tipos de dados. Use UNION quando não quiser mostrar duplicatas e UNION ALL quando quiser ver duplicatas. Aprenda todas as Formas Possíveis de Junção de Tabelas em SQL Quanto mais maneiras você souber como juntar tabelas em SQL, melhor. Com estes dois métodos mais o JOIN, unir tabelas se torna mais fácil. Os resultados de sua consulta estão mais próximos do que você precisa, e você obtém mais do SQL. Conhecer uma variedade de maneiras de juntar tabelas também permite que você sacuda um pouco seu código. Pode ser aborrecido escrever tudo da mesma maneira o tempo todo. Mas, o mais importante, cada um dos três métodos é útil em situações diferentes. Você pode aprender todos esses métodos de juntar mesas em nosso curso SQL para Iniciantes . Este é apenas um primeiro passo para dominar SQL de A a Z. Você também precisa de muita prática para dominar a junção de mesas. Talvez, a melhor maneira seja escolher pelo menos uma opção on-line da nossa lista de dez. Tags: fact table data warehouse