12th Dec 2022 9 minutos de leitura Quais são os diferentes tipos de SQL JOIN? Dmitri Vaitkun sql aprender sql sql joins Índice INNER JOIN (também conhecido como JOIN) UNIÃO EXTERNA ESQUERDA JUNÇÃO EXTERNA DIREITA UNIÃO EXTERNA COMPLETA CROSS JOIN Pratique todos os tipos de SQL JOIN JOIN! Você simplesmente não pode subestimar a importância do JOIN ao aprender SQL. Não só é uma das operações mais fundamentais em bancos de dados relacionais, mas também é muito versátil com muitos tipos diferentes. Embora o SQL JOIN possa ser intimidante no início, ele se torna um instrumento muito útil em seu arsenal, uma vez que você o compreenda. Vamos explorar todos os tipos de SQL JOIN! Podemos dizer com segurança que a operação JOIN é uma das características mais poderosas do SQL JOIN. É a fonte de inveja para todos os SGBDs não-relacionais (sistemas de gerenciamento de banco de dados) - é um conceito muito simples, mas amplamente aplicável em casos que juntam dois conjuntos de dados. Em resumo, o JOIN é uma operação em que as tabelas são comparadas entre si, linha por linha. Esta comparação permite a saída de colunas a partir de qualquer tabela envolvida no JOIN. Um ótimo lugar para exercícios após a leitura deste artigo é nosso curso interativo de Cláusulas JOIN em SQL curso. Ele oferece mais de 90 exercícios práticos sobre diferentes tipos de articulações aqui discutidas. Agora, vamos criar 2 mesas para que possamos explorar e dominar a arte de JOIN. Nossa primeira mesa, employees, consiste em 5 colunas: id - A identificação única do funcionário. name - O nome do funcionário. specialization - A especialização do funcionário na empresa. coach_id - O ID do treinador/mentor do funcionário. Este é outro funcionário de uma empresa. project_id - A identificação do projeto atual no qual o funcionário está envolvido. idnamespecializationcoach_idproject_id 1Olli WoodwardDeveloper41 2Pete NolanManagerNULL1 3Will BarkerIT Support43 4Uma NormanDeveloperNULL4 5Peggy BergManager24 6Mary SheltonAnalystNULLNULL A segunda tabela é projects. Ela contém 3 colunas: id - A identificação única do projeto. name - O nome do projeto. is_external - Um valor booleano que representa se o projeto é externo ou interno. idnameis_external 1Website UI/UX DesignTRUE 2Research & DevelopmentFALSE 3SupportFALSE 4Database Architecture DesignTRUE Note que existe uma conexão lógica entre as duas tabelas. O project_id em employees corresponde ao id de projects. Os valores correspondentes em todas as tabelas são codificados por cores para uma melhor apresentação. Agora que temos as tabelas, vamos direto ao assunto! INNER JOIN (também conhecido como JOIN) O primeiro dos tipos de SQL JOIN é o INNER JOIN. Quando você digita "JOIN" em seu código SQL, ele usa o INNER JOIN. Assim, embora não doa, você não precisa escrever INNER em suas consultas. Uma palavra-chave ON segue todos os tipos de JOINs em SQL. Ela indica o início da condição de conexão. INNER JOINs Como todos os outros JOINs, produz apenas as linhas que satisfazem a condição de conexão. Antes de prosseguir, observe que o operador JOIN não é a única forma de unir dados de duas tabelas. Você também pode usar WHERE. Interessado em saber mais sobre isso? Nós temos o artigo certo para você! Mas deixemos a teoria de lado por um momento e passemos à codificação. Vamos usar nossas duas tabelas e um INNER JOIN para descobrir qual funcionário trabalha em qual projeto: SELECT employees.name as employee, specialization, projects.name as project FROM employees JOIN projects ON employees.project_id = projects.id Antes de analisarmos o resultado desta consulta, vamos analisar a própria consulta. Como você pode ver, juntamos as duas tabelas usando JOIN. Após JOIN, especificamos o operador ON e a condição da junção. Portanto, juntamos as tabelas com base na condição de que project_id da tabela employees é igual à identificação da tabela projects. Vejamos o resultado da consulta: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Vemos que Olli Woodward e Pete Nolan têm um projeto "Website UI/UX Design". O project_id deles é igual a 1, que é a identificação deste projeto na tabela projects. O mesmo vale para outras filas no resultado. Entretanto, não vemos Mary Shelton aqui. Seu project_id é NULL, e não há projeto com o id igual a NULL. Da mesma forma, o projeto "Pesquisa & Desenvolvimento" tem o ID 2, mas nenhum funcionário tem o project_id igual a 2. Você está interessado no INNER JOIN e quer saber mais sobre seus meandros? Dê uma olhada em nosso artigo especificamente sobre o INNER JOIN! UNIÃO EXTERNA ESQUERDA O LEFT OUTER JOIN é um dos tipos externos de SQL JOIN. A palavra-chave OUTER é opcional e é freqüentemente omitida, deixando-nos apenas com o operador LEFT JOIN. A diferença geral entre o OUTER JOIN e o INNER JOIN é que o OUTER JOIN inclui não apenas as linhas que satisfazem a condição de conexão, mas também as linhas que não satisfazem a condição de uma (ou mais) das tabelas. Voltando ao LEFT OUTER JOIN especificamente, ele inclui as linhas que satisfazem a condição de conexão (assim como o INNER JOIN) e todas as outras linhas da tabela da esquerda (ou da primeira). Vamos usar nosso exemplo anterior, mudando JOIN para LEFT JOIN para ver a diferença: SELECT employees.name as employee, specialization, projects.name as project FROM employees LEFT JOIN projects ON employees.project_id = projects.id E aqui está o resultado da consulta: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Mary SheltonAnalystNULL Como podem ver, foi acrescentada mais uma fila: Mary Shelton com o projeto NULL. Esta fila em particular não satisfaz a condição employees.project_id = projects.id, pois não há projetos com um ID NULL. Mas esta fileira existe no employees tabela, de modo que é adicionado ao resultado. O nome do projeto para Mary Shelton é um valor NULL pelo mesmo motivo, já que não há identificações de NULL entre os projetos. Agora você tem a idéia principal do LEFT OUTER JOIN. Dito isto, você sempre pode ler nosso artigo sobre o LEFT OUTER JOIN para saber mais sobre ele ou ver mais exemplos dele! INNER e LEFT OUTER JOINs são os tipos mais comuns de JOIN em SQL. Portanto, não deixe de praticá-lo com nosso Cláusulas JOIN em SQL curso. Leia sobre o curso aqui. JUNÇÃO EXTERNA DIREITA O RIGHT OUTER JOIN pode ser visto como um irmão gêmeo do LEFT OUTER JOIN. A única diferença entre estes dois tipos de SQL JOIN é a tabela da qual os registros são tirados, independentemente da condição JOIN. No LEFT OUTER JOIN, que é a primeira tabela ou a da esquerda; no RIGHT OUTER JOIN, é a segunda tabela ou a da direita. Vamos usar o exemplo anterior, mas agora mudemos LEFT JOIN para RIGHT JOIN: SELECT employees.name as employee, specialization, projects.name as project FROM employees RIGHT JOIN projects ON employees.project_id = projects.id Agora, vamos analisar o resultado da consulta: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design NULLNULLResearch & Development Como podemos ver, o registro de Mary Shelton desapareceu agora. Ele não satisfaz a condição ON, nem pertence à mesa da direita. Portanto, não está incluída no resultado aqui. Por outro lado, agora temos aqui o projeto "Pesquisa & Desenvolvimento". Ele não satisfaz a condição JOIN, mas existe na tabela da direita, portanto está incluído no resultado. Note que esta linha tem NULLs nas colunas empregado e specialization. Isto porque não há registro na tabela employees A tabela tem project_id igual a 2, o ID deste projeto. Portanto, um NULL é devolvido em seu lugar. UNIÃO EXTERNA COMPLETA O FULL OUTER JOIN, ou simplesmente FULL JOIN, é o último tipo do OUTER JOIN. De certa forma, ele combina LEFT e RIGHT OUTER JOINs. Embora inclua registros que satisfazem a condição JOIN, também inclui linhas de ambas as tabelas que não o fazem. Ou seja, um FULL JOIN retorna todas as linhas de ambas as tabelas. Se uma linha de uma tabela não tiver um registro correspondente da outra tabela, então os dados que faltam são preenchidos com NULLs. Vamos ver um exemplo do FULL OUTER JOIN: SELECT employees.name as employee, specialization, projects.name as project FROM employees FULL JOIN projects ON employees.project_id = projects.id Aqui está o resultado: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Mary SheltonAnalystNULL NULLNULLResearch & Development Como você pode ver, aqui temos todas as fileiras de ambas as tabelas. As filas que satisfazem a condição têm os dados correspondentes de ambas as tabelas. Para as linhas que não atendem, as colunas da outra tabela são preenchidas com NULLs. Se você quiser uma breve descrição acessível do FULL OUTER JOIN assim como de outros tipos de SQL JOIN, use nossa folha de trapaça SQL JOIN. CROSS JOIN Este tipo de SQL JOIN é bastante diferente dos mencionados até agora neste artigo. Não apenas seu propósito é diferente, mas também tem uma sintaxe ligeiramente diferente. Quando usado em uma consulta, um CROSS JOIN retorna um produto cartesiano - todas as combinações possíveis das linhas de ambas as tabelas. Todos os registros de uma tabela são automaticamente unidos com todos os registros da outra. Além disso, não há nenhuma condição ON. Para isso JOIN em uma consulta, basta usar o operador CROSS JOIN sem seguir com a palavra-chave ON. Vejamos como tudo isso funciona em um exemplo: SELECT employees.name as employee, projects.name as project FROM employees CROSS JOIN projects Note que selecionamos duas colunas, o nome do funcionário e o nome do projeto, seguido por CROSS JOIN. Vejamos o resultado: employeeproject Olli WoodwardWebsite UI/UX Design Olli WoodwardResearch & Development Olli WoodwardSupport Olli WoodwardDatabase Architecture Design Pete NolanWebsite UI/UX Design Pete NolanResearch & Development Pete NolanSupport Pete NolanDatabase Architecture Design Will BarkerWebsite UI/UX Design Will BarkerResearch & Development Will BarkerSupport Will BarkerDatabase Architecture Design Uma NormanWebsite UI/UX Design Uma NormanResearch & Development Uma NormanSupport Uma NormanDatabase Architecture Design Peggy BergWebsite UI/UX Design Peggy BergResearch & Development Peggy BergSupport Peggy BergDatabase Architecture Design Mary SheltonWebsite UI/UX Design Mary SheltonResearch & Development Mary SheltonSupport Mary SheltonDatabase Architecture Design Anote o número de linhas que ele retorna. É muito fácil calcular isto: o número de linhas na primeira tabela * o número de linhas na segunda tabela = o número de linhas resultantes . Assim, cada um dos 6 funcionários é atribuído a cada um dos 4 projetos. Você ainda tem algumas perguntas persistentes sobre o CROSS JOIN? Ou talvez você só queira saber mais sobre ele. Confira nosso Guia Ilustrado para o SQL CROSS JOIN! Pratique todos os tipos de SQL JOIN JOIN! Agora você sabe sobre os diferentes tipos de JOIN em SQL. Esta é uma grande oportunidade para aprofundar este novo conhecimento ou simplesmente rever o que você já sabe. De qualquer forma, eu recomendo nosso grande curso interativo de SQL JOIN. Com mais de 90 exercícios práticos, é uma oportunidade de praticar este aspecto fundamental do SQL! Tags: sql aprender sql sql joins