SQL INNER JOIN (Português)

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 e table_2 são chamados de tabelas unidas.
  • Para cada linha em table_1, a consulta encontra a linha correspondente em table_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 em table_1 e este processo continua até que todas as linhas em table_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 da products tabela.
  • categoryName da tabela categories.

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;

Visualize INNER JOIN usando diagrama de Venn

Write a Comment

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