MySQL INNER JOIN

Resumo : neste tutorial, você aprenderá como usar a INNER JOINcláusula MySQL para selecionar dados de várias tabelas com base nas condições de junção.

Introdução à cláusula MySQL INNER JOIN

O INNER JOINcorresponde a cada linha de uma tabela com todas as linhas de outras tabelas e permite consultar linhas que contêm colunas de ambas as tabelas.

A INNER JOINé uma cláusula opcional da SELECTdeclaração. Aparece imediatamente após a FROMcláusula.

Aqui está a sintaxe da INNER JOINcláusula:

SELECT
    select_list
FROM t1
INNER JOIN t2 ON join_condition1
INNER JOIN t3 ON join_condition2
...;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • Primeiro, especifique a tabela principal que aparece na FROMcláusula ( t1).
  • Segundo, especifique a tabela que será unida à tabela principal, que aparece na INNER JOINcláusula ( t2, t3,…).
  • Terceiro, especifique uma condição de junção após a ONpalavra-chave da INNER JOINcláusula. A condição de junção especifica a regra para correspondência de linhas entre a tabela principal e a tabela que apareceu na INNER JOINcláusula.

Supondo que você queira unir duas tabelas t1e t2.

A instrução a seguir ilustra como unir duas tabelas t1e t2usar a INNER JOINcláusula:

SELECT 
     select_list
FROM 
     t1
INNER JOIN t2 ON join_condition;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A INNER JOINcláusula compara cada linha da t1tabela com cada linha da t2tabela com base na condição de junção.

Se as linhas de ambas as tabelas fizerem com que a condição de junção seja avaliada como TRUE, será INNER JOINcriada uma nova linha cujas colunas contêm todas as colunas de linhas das tabelas e incluirá essa nova linha no conjunto de resultados. Caso contrário, INNER JOINsimplesmente ignora as linhas.

Se nenhuma linha entre as tabelas fizer com que a condição de junção seja avaliada como TRUE, INNER JOINretornará um conjunto de resultados vazio.

Esta lógica também se aplica quando você une mais de 2 tabelas.

O seguinte diagrama de Venn ilustra como a INNER JOINcláusula funciona:

Diagrama de Venn do MySQL INNER JOIN

Exemplos de MySQL INNER JOIN

Vejamos as tabelas productse productlinesno banco de dados de exemplo .

tabelas de linhas de produtos de produtos

Neste diagrama, a tabela productspossui a coluna productLineque faz referência à coluna  productlineda tabela productlines. A coluna productLineda tabela productsé chamada de coluna de chave estrangeira .

Normalmente, você une tabelas que possuem relacionamentos de chave estrangeira, como as   tabelas productlinese products.

Suponha que você queira obter:

  • O productCode e productNameda productsmesa.
  • As textDescriptionlinhas de produtos da productlinestabela .

Para fazer isso, você precisa selecionar os dados de ambas as tabelas combinando as linhas com base nos valores da productlinecoluna usando a INNER JOINcláusula a seguir:

SELECT 
    productCode, 
    productName, 
    textDescription
FROM
    products t1
INNER JOIN productlines t2 
    ON t1.productline = t2.productline;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

MySQL INNER JOIN - Exemplo de dados de produtos

Como as colunas unidas de ambas as tabelas têm o mesmo nome   productline, você pode usar a USINGsintaxe:

SELECT 
    productCode, 
    productName, 
    textDescription
FROM
    products
INNER JOIN productlines USING (productline);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A consulta retorna o mesmo conjunto de resultados. No entanto, a USINGsintaxe é muito mais curta e limpa.

MySQL INNER JOIN com exemplo de cláusula GROUP BY

Veja o seguinte orderse orderdetailsas tabelas:

tabela de detalhes do pedido de pedidos

Esta consulta retorna o número do pedido, o status do pedido e o total de vendas das tabelas orderse orderdetailsusando a INNER JOINcláusula com a GROUP BYcláusula:

SELECT 
    t1.orderNumber,
    t1.status,
    SUM(quantityOrdered * priceEach) total
FROM
    orders t1
INNER JOIN orderdetails t2 
    ON t1.orderNumber = t2.orderNumber
GROUP BY t1.orderNumber;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

MysQL INNER JOIN com cláusula GROUP BY

Da mesma forma, a consulta a seguir usa the INNER JOINcom a USINGsintaxe:

SELECT 
    orderNumber,
    status,
    SUM(quantityOrdered * priceEach) total
FROM
    orders
INNER JOIN orderdetails USING (orderNumber)
GROUP BY orderNumber;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

MySQL INNER JOIN – exemplo de junção de três tabelas

Veja o seguinte productse orderstabelas orderdetails:

Esta consulta usa duas INNER JOINcláusulas para unir três tabelas: orders, orderdetailse products:

SELECT 
    orderNumber,
    orderDate,
    orderLineNumber,
    productName,
    quantityOrdered,
    priceEach
FROM
    orders
INNER JOIN
    orderdetails USING (orderNumber)
INNER JOIN
    products USING (productCode)
ORDER BY 
    orderNumber, 
    orderLineNumber;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Esta imagem mostra a saída parcial:

MySQL Inner Join - exemplo de junção de três tabelas

MySQL INNER JOIN – exemplo de junção de quatro tabelas

Consulte as tabelas orders, orderdetails, customerse a seguir products:

pedidos detalhes do pedido produtos clientes tabelas

Este exemplo usa três INNER JOINcláusulas para consultar dados das quatro tabelas acima:

SELECT 
    orderNumber,
    orderDate,
    customerName,
    orderLineNumber,
    productName,
    quantityOrdered,
    priceEach
FROM
    orders
INNER JOIN orderdetails 
    USING (orderNumber)
INNER JOIN products 
    USING (productCode)
INNER JOIN customers 
    USING (customerNumber)
ORDER BY 
    orderNumber, 
    orderLineNumber;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL Inner Join - exemplo de junção de quatro tabelas

MySQL INNER JOIN usando outros operadores

Até agora, você viu que a condição de junção usava o operador igual (=) para combinar linhas.

Além do operador igual (=), você pode usar outros operadores, como o operador maior que ( >), menor que ( <) e diferente ( <>) para formar a condição de junção.

A consulta a seguir usa uma junção menor que (  <) para encontrar o preço de venda do produto cujo código é S10_1678menor que o preço de varejo sugerido pelo fabricante (MSRP) para esse produto.

SELECT 
    orderNumber, 
    productName, 
    msrp, 
    priceEach
FROM
    products p
INNER JOIN orderdetails o 
   ON p.productcode = o.productcode
      AND p.msrp > o.priceEach
WHERE
    p.productcode = 'S10_1678';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL INNER JOIN - exemplo de junção diferente

Neste tutorial, você aprendeu como usar o MySQL INNER JOINpara consultar dados de várias tabelas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *