Resumo : neste tutorial, você aprenderá como usar a INNER JOIN
clá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 JOIN
corresponde 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 SELECT
declaração. Aparece imediatamente após a FROM
cláusula.
Aqui está a sintaxe da INNER JOIN
clá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
FROM
cláusula (t1
). - Segundo, especifique a tabela que será unida à tabela principal, que aparece na
INNER JOIN
cláusula (t2
,t3
,…). - Terceiro, especifique uma condição de junção após a
ON
palavra-chave daINNER JOIN
cláusula. A condição de junção especifica a regra para correspondência de linhas entre a tabela principal e a tabela que apareceu naINNER JOIN
cláusula.
Supondo que você queira unir duas tabelas t1
e t2
.
A instrução a seguir ilustra como unir duas tabelas t1
e t2
usar a INNER JOIN
cláusula:
SELECT
select_list
FROM
t1
INNER JOIN t2 ON join_condition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A INNER JOIN
cláusula compara cada linha da t1
tabela com cada linha da t2
tabela 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 JOIN
criada 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 JOIN
simplesmente ignora as linhas.
Se nenhuma linha entre as tabelas fizer com que a condição de junção seja avaliada como TRUE
, INNER JOIN
retornará 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 JOIN
cláusula funciona:
Exemplos de MySQL INNER JOIN
Vejamos as tabelas products
e productlines
no banco de dados de exemplo .
Neste diagrama, a tabela products
possui a coluna productLine
que faz referência à coluna productline
da tabela productlines
. A coluna productLine
da tabela products
é chamada de coluna de chave estrangeira .
Normalmente, você une tabelas que possuem relacionamentos de chave estrangeira, como as tabelas productlines
e products
.
Suponha que você queira obter:
- O
productCode
eproductName
daproducts
mesa. - As
textDescription
linhas de produtos daproductlines
tabela .
Para fazer isso, você precisa selecionar os dados de ambas as tabelas combinando as linhas com base nos valores da productline
coluna usando a INNER JOIN
clá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 )
Como as colunas unidas de ambas as tabelas têm o mesmo nome productline
, você pode usar a USING
sintaxe:
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 USING
sintaxe é muito mais curta e limpa.
MySQL INNER JOIN com exemplo de cláusula GROUP BY
Veja o seguinte orders
e orderdetails
as tabelas:
Esta consulta retorna o número do pedido, o status do pedido e o total de vendas das tabelas orders
e orderdetails
usando a INNER JOIN
cláusula com a GROUP BY
clá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 )
Da mesma forma, a consulta a seguir usa the INNER JOIN
com a USING
sintaxe:
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 products
e orders
tabelas orderdetails
:
Esta consulta usa duas INNER JOIN
cláusulas para unir três tabelas: orders
, orderdetails
e 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 quatro tabelas
Consulte as tabelas orders
, orderdetails
, customers
e a seguir products
:
Este exemplo usa três INNER JOIN
clá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 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_1678
menor 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 )
Neste tutorial, você aprendeu como usar o MySQL INNER JOIN
para consultar dados de várias tabelas.