Resumo: neste tutorial, você aprenderá como consultar dados de várias tabelas usando a instrução SQL INNER JOIN.
No tutorial anterior, você aprendeu como consultar dados de uma única tabela usando a instrução SELECT. No entanto, você geralmente deseja consultar dados de várias tabelas para ter um conjunto de resultados completo para análise. Para consultar dados de várias tabelas, você usa instruções de junção.
O SQL fornece vários tipos de junções, como junção interna, junção externa (junção externa esquerda ou junção esquerda, junção externa direita ou junção direita e junção externa completa ) e auto-adesão. Neste tutorial, mostraremos como usar a cláusula INNER JOIN
.
Sintaxe SQL INNER JOIN
O seguinte ilustra INNER JOIN
sintaxe para unir duas tabelas:
1
2
3
4
5
|
SELECIONE
coluna1, coluna2
FROM
tabela_1
INNER JOIN tabela_2 ON condição_de_junção;
|
Vamos examinar a sintaxe acima em mais detalhes:
- Os
table_1
etable_2
são chamados de tabelas unidas. - Para cada linha em
table_1
, a consulta encontra a linha correspondente emtable_2
que atendem à condição de junção. Se a linha correspondente for encontrada, a consulta retornará uma linha que contém dados de ambas as tabelas. Caso contrário, examina a próxima linha emtable_1
e este processo continua até que todas as linhas emtable_1
sejam examinadas.
Para juntar mais de duas tabelas, a mesma lógica é aplicada.
Exemplos de SQL INNER JOIN
SQL INNER JOIN – consulta de dados de exemplo de duas tabelas
Neste exemplo, usaremos as tabelas products
e categories
no banco de dados de amostra. A imagem a seguir ilustra o diagrama do banco de dados.
No diagrama acima:
- Uma categoria pode ter muitos produtos.
- Um produto pertence a uma e somente uma categoria.
Portanto, há uma relação muitos para um entre as linhas no categories
tabela e linhas na products
tabela. O link entre as duas tabelas é a coluna categoryid
.
Precisamos consultar os seguintes dados de ambas as tabelas:
-
productID
,productName
daproducts
tabela. -
categoryName
da tabelacategories
.
A consulta a seguir recupera dados de ambas as tabelas:
1
2
3
4
5
6
|
SELECIONE
productID, productName, categoryName
FROM
produtos
INNER JOIN
categorias ON categories.categoryID = products.categoryID;
|
A condição de junção é especificada na INNER JOIN
cláusula após a ON
palavra-chave como a expressão:
1
|
categories.categoryID = products.categoryID
|
Para cada linha no products
tabela, a consulta encontra uma linha correspondente na categories
tabela que tem a mesma categoryid.
Se houver uma correspondência entre duas linhas em ambas as tabelas, ele retorna uma linha que contém colunas especificadas na cláusula SELECT, ou seja, id do produto, nome do produto e nome da categoria; caso contrário, ele verifica a próxima linha na tabela products
para encontrar a linha correspondente na tabela categories
. Este processo continua até que a última linha da tabela de produtos seja examinada.
SQL INNER JOIN – consulta de dados de três tabelas
Podemos usar as mesmas técnicas para juntar três tabelas.A consulta a seguir seleciona productID
, productName
, categoryName
e supplier
das tabelas products
, categories
e suppliers
:
1
2
3
4
5
6
7
8
9
10
11
|
SELECIONE
productID,
productName,
categoryName,
companyName AS fornecedor
FROM
produtos
INNER JOIN
categorias ON categorias. categoryID = products.categoryID
INNER JOIN
fornecedores ON supplies.supplierID = products.supplierID
|
SQL INNER JOIN implícita
Há outra forma de INNER JOIN
chamada junção interna implícita, conforme mostrado abaixo:
1
2
3
4
5
6
7
|
SELECIONE
coluna1, coluna2
FROM
tabela_1,
tabela_2
ONDE
condição_de_junção;
|
Neste formulário, você especifica todas as tabelas unidas em a cláusula FROM
e a condição de junção colocada na cláusula WHERE da instrução SELECT
. Podemos reescrever o exemplo de consulta acima usando o INNER JOIN
implícito da seguinte maneira:
1
2
3
4
5
6
7
|
SELECIONE
productID, productName, categoryName
FROM
produtos,
categorias
ONDE
produtos.categoryID = categorias.categoryID;
|