12th Dec 2022 8 minutos de leitura SQL INNER JOIN Explicado em palavras simples Ignacio L. Bisso noções básicas de sql sql aprender sql Índice Um banco de dados de agências de viagens Seu Primeiro JOIN SQL: Obtenha os Pacotes de Viagem Incluindo Cidades de Praia Neste artigo, vou abordar talvez o elemento mais importante da linguagem SQL. É isso mesmo! Estou falando da cláusula SQL INNER JOIN. Como você sabe, em um banco de dados, os dados são armazenados em várias tabelas. Em meu último artigo, eu cobri como criar consultas SQL quando os dados necessários estão em apenas uma tabela. Mas e se os dados de que você precisa estiverem em duas tabelas? Para este caso, você precisa usar uma cláusula JOIN para combinar as duas tabelas, o que é algo semelhante a conectar as duas tabelas. Neste artigo, vou explicar a cláusula SQL INNER JOIN em palavras simples usando alguns exemplos fáceis de entender. Um banco de dados de agências de viagens Talvez você já saiba que em um banco de dados os dados são armazenados em tabelas. Suponha que você trabalhe para uma agência de viagens, e o banco de dados da agência tenha duas tabelas: TRAVEL_PACK e CITIES. Na imagem a seguir você pode ver o banco de dados, é claro que nem todos os dados estão sendo mostrados. Amostra de TRAVEL_PACK Tabela PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days Amostra de CITIES Tabela NAMETYPE_OF_CITYPACK_NAMEDAYS_STAYING San FranciscohistoricalUnited States: West Coast5 WashingtonhistoricalUnited States: Big Cities3 New YorkbusinessUnited States: Big Cities7 Rio de JaneirobeachBeaches of Brazil4 UshuaiamountainSouth American Tour3 Salvador de BahiabeachBeaches of Brazil3 Los AngelesbeachUnited States: West Coast7 Favor observar: Para usar uma cláusula JOIN para combinar duas tabelas, deve haver um campo ou coluna que apareça em ambas as tabelas. No banco de dados de amostras, este campo é o nome do pacote de viagem. Como você pode ver no TRAVEL_PACK tabela, o nome da embalagem está sob a coluna PACK_NAMEe no CITIES tabela o nome do pacote está na coluna PACK_NAME também. É fácil ver que ambas as colunas têm o mesmo nome de coluna, porém em outros bancos de dados pode ser diferente. Em outras palavras, ao utilizar uma cláusula INNER JOIN, o nome da coluna comum pode ser diferente em ambas as tabelas ou não. De qualquer forma, lembre-se do nome da coluna PACK_NAMEporque você precisará dela mais tarde para escrever a cláusula JOIN. Seu Primeiro JOIN SQL: Obtenha os Pacotes de Viagem Incluindo Cidades de Praia Geralmente recomendo começar pensando onde os dados estão localizados que você precisa para a consulta. Neste caso, é claro que você precisará da TRAVEL_PACK tabela para obter os nomes das embalagens, mas ao mesmo tempo você também precisará da CITIES mesa, porque é preciso verificar se a cidade é ou não uma cidade de praia. Portanto, os dados necessários para esta consulta estão em duas tabelas, que é o motivo pelo qual você precisa usar um SQL JOIN. Quando você tiver que obter dados de duas (ou mais) tabelas, você deve usar um SQL JOIN. O SQL JOIN atua como um conector entre duas tabelas, criando pares de registros. Basicamente, são necessários dois registros (um de cada tabela) e os une em um par de registros. Este tipo de união é chamado de INNER JOIN, e em SQL os termos JOIN ou INNER JOIN são exatamente os mesmos. Para aqueles leitores que querem ir mais fundo, existem outros tipos de join SQL, por exemplo, o oposto do join INNER é outro tipo de join chamado LEFT join ou OUTER LEFT join, e você também pode encontrar outros tipos de join como RIGHT join, NATURAL join e LATERAL join, entre outros. Você pode aprender muitos destes tipos de join SQL no curso online Cláusulas JOIN em SQL . Entretanto, neste artigo vou focalizar o INNER JOIN, que é realmente poderoso! A imagem seguinte mostra como a cláusula JOIN cria um par de registros: (clique para ampliar) Agora, vou mostrar a sintaxe para implementar um INNER JOIN, usando o próximo padrão FROM table1 INNER JOIN table2 ON common column in table1 = common column in table2 Se você preencher o padrão com suas tabelas de amostras e nomes de colunas, então você terá a próxima cláusula INNER JOIN: FROM CITIES INNER JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME DAS CIDADES Uma vez concluída a cláusula FROM com o INNER JOIN, você pode continuar trabalhando nas cláusulas SELECT e WHERE da consulta. A cláusula SELECT é fácil porque você só precisa devolver o NOME da coluna, então a cláusula será: SELECT TRAVEL_PACK.PACK_NAME Observe a referência à coluna PACK_NAME é feito adicionando um prefixo com o nome da tabela (TRAVEL_PACK neste caso). Esta é uma boa prática a ser aplicada quando a consulta envolve mais de uma mesa. Na cláusula WHERE você precisará filtrar os resultados para incluir apenas cidades de praia. Então a cláusula será: WHERE CITIES.TYPE_OF_CITY = 'beach' Finalmente, se você colocar todas as cláusulas juntas, a consulta será: SELECT TRAVEL_PACK.PACK_NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE CITIES.TYPE_OF_CITY = 'beach' A seguir é o resultado da consulta anterior: NAME Los Angeles Salvador de Bahia Rio de Janeiro Sua próxima adesão: as cidades incluídas nos pacotes de viagem mais baratas do que US$2500 Novamente, semelhante à consulta anterior, você pode ver que precisa acessar duas tabelas para esta consulta, usando um JOIN para a CITIES e TRAVEL_PACK tabelas novamente. Nota: Uso o termo JOIN em vez de INNER JOIN porque ambos são exatamente os mesmos em SQL. A partir da consulta anterior, você já sabe como criar a cláusula JOIN. As mudanças estão nas cláusulas SELECT e WHERE, como você pode ver nos parágrafos seguintes. A cláusula de seleção é fácil, pois você só precisa do nome da cidade: SELECT CITY.NAME Na cláusula de onde você precisa filtrar pelo preço do pacote de viagem, então a cláusula WHERE será: WHERE TRAVEL_PACK.PRICE <= 2500 Em seguida, a consulta completa será a seguinte: SELECT CITY.NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE TRAVEL_PACK.PRICE <= 2500 O resultado da consulta anterior será: O resultado da consulta anterior: NAME Rio de Janeiro Ushuaia Salvador de Bahia Mergulho profundo: INNER JOIN for Three Tables É possível utilizar um INNER JOIN com mais de duas mesas? Claro que sim. Além disso, você pode usar uma cláusula de JUNTO com quantas tabelas desejar. Entretanto, devo mencionar que cada cláusula de SQL JOIN é apenas para um único par de tabelas. Portanto, se você tiver três tabelas para juntar, tais como T1, T2 e T3, você precisará de duas cláusulas SQL JOIN como você pode ver no exemplo a seguir: FROM T1 JOIN T2 ON ...... JOIN T3 ON ....... Eu deixei a cláusula ON vazia porque vou explicar esta parte com o seguinte exemplo. Suponha que você amplie o banco de dados da agência adicionando uma nova tabela chamada STATES onde você planeja armazenar os estados, regiões ou províncias de cada país. O banco de dados com três tabelas será como a figura a seguir: TRAVEL_PACK Tabela PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days STATES Tabela NAMECOUNTRYPOPULATIONLANGUAGE New YorkUnited States17000000english Tierra del FuegoArgentina190000spanish CaliforniaUnited States13400000english Rio de JaneiroBrasil15000000portuguese BahiaBrasil8000000portuguese CITIES Tabela NAMETYPE_OF CITYPACK_NAMEDAYS_STAYSTATE San FranciscohistoricalUnited States: West Coast5California WashingtonhistoricalUnited States: Big Cities3Washington New YorkbusinessUnited States: Big Cities7New York Rio de JaneirobeachBeaches of Brazil4Rio de Janeiro UshuaiamountainSouth American Tour3Tierra del Fuego Salvador de BahiabeachBeaches of Brazil3Bahia Los AngelesbeachUnited States: West Coast7California Suponha que você precise obter um relatório com uma lista de todas as cidades com o estado, o nome do pacote e o idioma usado na cidade nos estados onde o idioma é espanhol ou português. É claro que você precisa juntar as tabelas CITIES e STATES e, em seguida, junte este resultado também com o TRAVEL_PACK mesa. Você pode começar aplicando o que aprendeu nos exemplos anteriores. Primeiro, use uma cláusula JOIN para combinar a tabela CITIES com a mesa STATES. É claro que você precisa usar as colunas CITIES.STATE e STATE.NAME na cláusula ON. Em seguida, a cláusula de origem será a seguinte: FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME Em seguida, é preciso acrescentar a terceira tabela à cláusula de JOIN, que é a tabela TRAVEL_PACK. Você já aprendeu como se juntar a esta tabela em um exemplo anterior, portanto o JOIN completo será: FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME Acrescentando as cláusulas SELECT e WHERE, a consulta completa será como a seguinte: SELECT CITIES.NAME, STATES.NAME, TRAVEL_PACK.PACK_NAME, STATES.LANGUAGE FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE STATES.LANGUAGE IN ('spanish','portuguese') E o resultado será: NAMENAMEPACK_NAMELANGUAGE SalvadorBahiaBeaches of Brazilportuguese Rio de JaneiroRio de JaneiroBeaches of Brazilportuguese UshuaiaTierra del FuegoSouth American Tourspanish Próximos passos para continuar aprendendo Neste artigo, eu cobri como juntar tabelas em SQL. Expliquei usando exemplos do que é um SQL INNER JOIN e como funciona a cláusula JOIN. A cláusula JOIN abre um enorme mundo de novas possibilidades em SQL. Pense que qualquer pessoa não técnica com capacidade de usar a cláusula JOIN em consultas SQL tem um valor extra como funcionário, independentemente da área da empresa em que trabalha. Vá fundo com Cláusulas JOIN em SQL e seja um colaborador de negócios sólido em sua empresa! Tags: noções básicas de sql sql aprender sql