JOIN no SQL: o que é, para que serve e tipos de JOINs e como fazer
5 min5 minutos de leitura
5 min5 minutos de leitura
No SQL (Structured Query Language) existem várias formas de realizar consultas no banco de dados utilizando desde queries simples a queries mais complexas.
Autor(a)
Danielle Oliveira
Danielle é formada em Sistemas de Informação. Fez parte do Scuba Team. Atualmente é instrutora de Data Science, nas áreas de Banco de dados, Business Intelligence e NoSQL. É apaixonada por livros, música e tecnologia.
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
Um exemplo comum é a necessidade de realizar consultas em várias tabelas ao mesmo tempo. No banco de dados, existem várias tabelas diferentes onde os dados são armazenados e, muitas vezes, é necessário juntar os dados que estão em várias tabelas para se obter alguma informação muito importante.
Com esse intuito, foi criada a cláusula JOIN ou junção que é utilizada para realizar a combinação de colunas de uma ou mais tabelas em um única query a partir de uma coluna em comum entre as tabelas.
Existem cinco tipos de JOIN no SQL, cada um permitindo diferentes formas de combinar dados. Os principais tipos de JOINs são: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, e CROSS JOIN. Conhecer os tipos de joins é essencial para extrair informações completas do banco de dados.
Neste artigo, vamos abordar como cada um deles funciona.
INNER JOIN
O `INNER JOIN` é utilizado quando queremos retornar os registros que tenham correspondência nas duas tabelas presentes na junção. Observe que, na imagem a seguir, é utilizado o `INNER JOIN`. Nesse caso apenas os registros que estão na interseção do conjunto A com o conjunto B são retornados:
Trazendo para o SQL, vamos utilizar o seguinte exemplo: em um banco de dados de uma empresa, existem duas tabelas que se relacionam entre si, sendo elas a tabela de funcionários e a tabela de cargos. A primeira possui os campos código do funcionário, nome e código do cargo:
E a segunda possui os campos código do cargo e descrição dos cargos:
SELECT com INNER JOIN:
SELECT <select_list> FROM Tabela A INNER JOIN Tabela B ON A.Key = B.KeySELECTA.nome, A.cod_cargo, B.descrição FROM funcionario A INNER JOIN cargo B ON A.cod_cargo = B.cod_cargo;
Informando no `SELECT` os campos que serão retornados no resultado:
SELECTA.nome, A.cod_cargo, B.descrição
Realizando a junção entre as tabelas:
FROM funcionario A INNER JOIN cargo B
Condição que os registros precisam corresponder para serem retornados:
ON A.cod_cargo = B.cod_cargo;
Resultado
Foram retornadas todas as pessoas funcionárias, com exceção do funcionário Carlos que não tem um cargo associado a ele e do cargo entregador, pois não está associado a nenhum funcionário.
LEFT JOIN
O `LEFT JOIN` é utilizado quando queremos retornar apenas os registros da tabela da esquerda (tabela que está antes da cláusula LEFT JOIN) e os registros que tenham correspondência na tabela da direita.
Observe que, na imagem a seguir, é utilizado o `LEFT JOIN`. Nesse caso, todos os registros do conjunto A e apenas os registros que estão na interseção do conjunto A com o conjunto B seriam retornados:
SELECT com LEFT JOIN:
SELECT <select_list> FROM Tabela ALEFT JOIN Tabela B ON A.Key = B.KeySELECTA.nome, A.cod_cargo, B.descrição FROM funcionario ALEFT JOIN cargo B ON A.cod_cargo = B.cod_cargo;
Resultado
Foram retornadas todas as pessoas funcionárias, tanto as que possuem um cargo associado quanto as que não possuem.
RIGHT JOIN
"O `RIGHT JOIN` é utilizado quando queremos retornar todos os registros da tabela à direita (a que está após a cláusula RIGHT JOIN), incluindo aqueles que não possuem correspondência na tabela à esquerda."
Observe que, na imagem a seguir, é utilizado o `RIGHT JOIN`. Nesse caso, todos os registros do conjunto B e apenas os registros que estão na interseção do conjunto A com o conjunto B seriam retornados:
SELECT com RIGHT JOIN:
SELECT <select_list> FROM Tabela ARIGHT JOIN Tabela B ON A.Key = B.KeySELECTA.nome,A.cod_cargo,B.descrição FROM funcionario ARIGHT JOIN cargo B ON A.cod_cargo = B.cod_cargo;
Resultado
Foram retornados todos os cargos, incluindo aqueles que estão associados a alguma pessoa funcionária, e os que não estão associados a nenhuma.
FULL JOIN
O `FULL JOIN` é utilizado quando queremos retornar registros que tenham correspondência em qualquer uma das tabelas presentes na junção. Observe que, na imagem a seguir, é utilizado o `FULL JOIN`. Nesse caso, todos os registros do conjunto B e todos os registros do conjunto A seriam retornados:
SELECT com FULL JOIN:
SELECT <select_list> FROM Tabela A FULL JOIN Tabela B ON A.Key = B.KeySELECTA.nome, A.cod_cargo, B.descrição FROM funcionario A FULL JOIN cargo B ON A.cod_cargo = B.cod_cargo;
Resultado
Foram retornadas todasas pessoas funcionárias, mesmo os que não estão associados a um cargo e todos os cargos, mesmo aqueles sem associação.
CROSS JOIN
O `CROSS JOIN` é utilizado quando queremos retornar os registros realizando um cruzamento entre os dados das tabelas presentes na junção. Observe que, na imagem a seguir, é utilizado o `CROSS JOIN`. Nesse caso, todos os registros do conjunto A realizam um cruzamento com todos os registros do conjunto B para serem retornados:
SELECT com CROSS JOIN:
SELECT <select_list> FROM Tabela A CROSS JOIN Tabela BSELECTA.nome, A.cod_cargo, B.descrição, B.cod_cargoFROM funcionario A CROSS JOIN cargo B;
Resultado
Foi realizado o cruzamento entre todos os registros da tabela de funcionários com todos os registros da tabela de cargos.
CONCLUSÃO
Neste artigo podemos ver como os joins são de suma importância para a linguagem SQL. Ao utilizar os JOINS, podemos realizar a combinação de colunas de uma ou mais tabelas para realizar consultas complexas nos bancos de dados de forma simples.
Gostou deste artigo e quer conhecer ainda mais sobre banco de dados e SQL?
A Trilha Alura de Modelagem de Dados foi feita para você! Acesse a formação e descubra o que mais você pode fazer com banco de dados e SQL.