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

  1. Junção interna
  2. Associação à esquerda
  3. Right Join
  4. 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

  1. Execução mais rápida, o que significa recuperação mais rápida das colunas desejadas.
  2. Otimizado, legível e compreensível
  3. 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 -

  1. Vantagens do NoSQL
  2. Ferramentas de Gerenciamento SQL
  3. Banco de dados em SQL
  4. Curinga no SQL
  5. Os 6 principais tipos de junções no MySQL com exemplos