Introdução aos tipos de junções no SQL
Uma cláusula Join no SQL serve para o propósito de combinar linhas de duas ou mais tabelas. O processo de combinação de linhas depende de uma coluna relacionada a elas. Os quatro tipos diferentes de junções no SQL são nomeados como junção interna, junção esquerda, junção direita e junção completa. Antes que possamos realmente começar a usar qualquer tipo de junção, precisamos de um RDBMS ou de um Sistema de Gerenciamento de Banco de Dados Relacional em que carregaremos os dados. Uma das maneiras muito fáceis de entender as junções é pelo uso do diagrama de Venn. O uso de um diagrama de Venn facilita a avaliação de todas as relações possíveis e lógicas entre diferentes conjuntos de dados. Vamos entender isso um por um usando o diagrama de Venn. Mais tarde, entenderemos a diferença entre estes usando alguns exemplos práticos. Suponhamos que existam dois conjuntos de dados em nosso banco de dados armazenados na forma da Tabela Um e da Tabela Dois. Existe alguma relação entre as duas tabelas especificada na forma de uma chave primária e um conceito de chave estrangeira. Se você juntar duas tabelas com algum tipo de relacionamento, a representação do diagrama de Venn do cenário será algo como:
A quantidade dessa sobreposição determinará a extensão da semelhança entre as duas tabelas, ou seja, Tabela A e Tabela B. Isso significa que o número de registros da tabela um, que correspondem aos registros da tabela dois, é representado pela seção de sobreposição. Este é um subconjunto de dados. Obtemos quatro tipos diferentes de junções com base no subconjunto de dados que estamos escolhendo nas duas tabelas.
Sintaxe de junção:
SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Tipos de junções no SQL
- Junção interna
- Associação à esquerda
- Right Join
- Junção completa
Abaixo, explicamos os diferentes tipos de junções em Detalhado.
1. Junção Interna
Em uma junção interna, selecionamos apenas os dados comuns em ambas as tabelas. (ou seja, parte 3 aqui) Para torná-lo mais preciso, todos os registros de ambas as tabelas correspondentes à condição mencionada com a junção são selecionados nessa junção.
Sintaxe da junção interna:
SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition
2. Junção Esquerda
Na junção esquerda, selecionamos todos os dados da tabela esquerda e da tabela direita apenas selecionamos o conjunto de dados que corresponde à condição mencionada na junção (aqui área 1 + 3)
Sintaxe da junção esquerda:
SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
3. Junção certa
Na junção direita, selecionamos todos os dados da tabela direita e, da esquerda, selecionamos apenas o conjunto de dados que corresponde à condição mencionada na junção (aqui 3 + 2)
Sintaxe da junção correta:
SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
4. Junção completa
Na junção completa, todos os registros das duas tabelas são mesclados e selecionados, independentemente da condição mencionada com a junção atendida ou não. (aqui 1 + 2 + 3)
Sintaxe da junção completa:
SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Exemplos de junções no SQL
Considere as duas tabelas abaixo:
1. Exemplo de um ORDER_DETAILS
O pedido de tabela contém os detalhes do pedido feito pelo cliente, como o ID do pedido, o número de produtos solicitados, o valor do pedido, o ID do cliente que fez o pedido e a data em que o pedido foi feito. Esse tipo de tabela pode ser usado por qualquer site on-line para armazenar os detalhes do pedido.
Tabela ORDER_DETAILS:
Order_ID | No_of_Items | Valor do pedido | Identificação do Cliente | Data do pedido |
123 | 3 | 5500 | P_1 | 20/01/2019 |
234 | 2 | 6500 | P_12 | 10/02/2019 |
345 | 1 | 10000 | P_13 | 27/05/2019 |
456 | 4 | 4000 | P_14 | 07/11/2019 |
567 | 2 | 20656 | P_1 | 15/12/2019 |
678 | 3 | 15000 | P_11 | 27/10/2019 |
2. Exemplo de CUSTOMER_DETAILS
Agora, vamos tomar outra tabela na qual os detalhes do cliente serão armazenados para poder entregar o pedido em seus respectivos endereços. A tabela do cliente terá, portanto, os detalhes do cliente, como o ID do cliente (cust_id), que será exclusivo para cada cliente. Agora, o primeiro nome e o sobrenome estão armazenados no campo chamado - Nome_Custódia e Nome_Custódia. Os outros campos armazenam as informações, como a identificação de e-mail, o número de celular do cliente, além do endereço, código PIN, cidade e estado. Assim, podemos ver que nossa tabela Customer será semelhante a -
Tabela CUSTOMER_DETAILS:
Cust_Id | Cust_First_Name | Cust_Last_Name | Código PIN | Endereço | Cust_Mobile | Cidade | Estado | Cust_email |
P_50 | Alice | Pedro | 111111 | 330 xyz street | 123 | Bangalore | KA | |
P_12 | James | Dsouza | 155511 | 420 abc colony | 234 | Hyderabad | AP | |
P_15 | atormentar | Oleiro | 123456 | 551 mg estrada | 444 | Noida | Délhi | |
P_40 | Miley | Parker | 111121 | Estrada de 11 pés | 224 | Bangalore | KA | |
P_10 | Herman | arbusto | 123423 | 34 th thanco Street | 432 | Délhi | Délhi | |
P_18 | Dan | Castanho | 134523 | 50ª estrada independente | 145 | Gurugram | Haryana | |
P_20 | James | Russel | 111111 | 101 mg road | 678 | Bangalore | KA | |
P_1 | Miley | Madison | 100011 | 45º layout do kaverappa | 987 | Chennai | TN |
Agora, usando este exemplo, vamos entender a funcionalidade das junções. Podemos ver que o relacionamento entre as duas tabelas, ou seja, a tabela ORDER_DETAILS e a tabela CUSTOMER_DETAILS é estabelecido pela chave que possui o valor do ID do cliente, ou seja, Customer_Id, que é uma chave primária na tabela CUSTOMER_DETAILS e uma chave estrangeira na Tabela ORDER_DETAILS.
Alguns pontos importantes a serem observados aqui antes de prosseguir são:
- Nem todos os clientes da nossa tabela CUSTOMER_DETAILS fizeram uma solicitação de pedido.
- Nem todas as solicitações de pedidos que temos em nossa tabela ORDER_DETAILS possuem um customer_id presente em nossa tabela CUSTOMER_DETAILS, o que significa que, para alguns pedidos, não há detalhes do cliente.
3. Junção Interna
A junção interna fornecerá apenas os registros para os quais a condição é atendida.
Inquerir:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
inner join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Resultado:
Cust_First_Name | Cust_email | No_of_Items | Valor do pedido | Data do pedido |
Miley | 3 | 5500 | 20/01/2019 | |
James | 2 | 6500 | 10/02/2019 | |
Miley | 2 | 20656 | 15/12/2019 |
4. Junção esquerda
A associação à esquerda fornecerá todos os registros da tabela esquerda, ou seja, a tabela CUSTOMER_DETAILS. Se não houver pedidos feitos pelo cliente, ele retornará um valor nulo para as colunas na tabela ORDER_DETAILS.
Inquerir:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
left join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Resultado:
Cust_First_Name | Cust_email | No_of_Items | Valor do pedido | Data do pedido |
Alice | NULO | NULO | NULO | |
James | 2 | 6500 | 10/02/2019 | |
atormentar | NULO | NULO | NULO | |
Miley | NULO | NULO | NULO | |
Herman | NULO | NULO | NULO | |
Dan | NULO | NULO | NULO | |
James | NULO | NULO | NULO | |
Miley | 3 | 5500 | 20/01/2019 | |
Miley | 2 | 20656 | 15/12/2019 |
5. Junção certa
Certo, o Join fornecerá todos os registros da tabela correta, ou seja, a tabela ORDER_DETAILS. Se não houver registros de clientes encontrados para o pedido, ele retornará um valor nulo para as colunas na tabela CUSTOMER_DETAILS.
Inquerir:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
right join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Resultado:
Cust_First_Name | Cust_email | No_of_Items | Valor do pedido | Data do pedido |
Miley | 3 | 5500 | 20/01/2019 | |
James | 2 | 6500 | 10/02/2019 | |
NULO | NULO | 1 | 10000 | 27/05/2019 |
NULO | NULO | 4 | 4000 | 07/11/2019 |
Miley | 2 | 20656 | 15/12/2019 | |
NULO | NULO | 3 | 15000 | 27/10/2019 |
6. Junção Completa
A Junção completa fornecerá todos os registros especificados nas duas tabelas.
Inquerir:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
full join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Resultado:
Cust_First_Name | Cust_email | No_of_Items | Valor do pedido | Data do pedido |
Alice | NULO | NULO | NULO | |
James | 2 | 6500 | 10/02/2019 | |
atormentar | NULO | NULO | NULO | |
Miley | NULO | NULO | NULO | |
Herman | NULO | NULO | NULO | |
Dan | NULO | NULO | NULO | |
James | NULO | NULO | NULO | |
Miley | 3 | 5500 | 20/01/2019 | |
Miley | 2 | 20656 | 15/12/2019 | |
NULO | NULO | 1 | 10000 | 27/05/2019 |
NULO | NULO | 4 | 4000 | 07/11/2019 |
NULO | NULO | 3 | 15000 | 27/10/2019 |
Vantagens das junções no SQL
- Execução mais rápida, o que significa recuperação mais rápida das colunas desejadas.
- Otimizado, legível e compreensível
- Aumento no desempenho.
Conclusão
Como visto, usamos JOINs para anexar e obter os campos de diferentes tabelas.
- A junção interna busca registros onde a condição fornecida é atendida.
- A associação à esquerda fornecerá todas as linhas da tabela esquerda, mesmo quando a condição especificada não corresponder.
- A Junta Direita fornecerá todas as linhas da tabela esquerda, mesmo quando a condição especificada não corresponder.
- Junção completa retorna todas as linhas quando houver uma correspondência em uma das tabelas.
- As consultas de junção podem ser usadas com comandos como - SELECT, INSERT, UPDATE, DELETE.
- As junções também se dão bem com diferentes cláusulas como - GROUP BY, SUB QUERIES, WHERE, AGREGAR FUNÇÕES, etc.
Artigo recomendado
Este foi um guia para tipos de junções no SQL. Aqui discutimos os diferentes tipos de junções no SQL e suas vantagens, juntamente com exemplos. Você também pode consultar nossos outros artigos sugeridos para saber mais -
- Vantagens do NoSQL
- Ferramentas de Gerenciamento SQL
- Banco de dados em SQL
- Curinga no SQL
- Os 6 principais tipos de junções no MySQL com exemplos