Você está na página 1de 6

SQL: INNER JOIN

INNER JOIN é uma cláusula que permite a junção entre duas ou mais tabelas, desde que hajam entrelaçamento entre todas.
Suporte ao alunoAnotarMarcar como concluído
ArtigosBanco de DadosSQL: INNER JOIN

INNER JOIN é uma cláusula que permite a junção entre duas ou mais tabelas, desde que hajam
entrelaçamento entre todas.

Guia do artigo:

 Visão geral
 Sintaxe
 Na prática
 Cursos de Banco de Dados
 Curso de SQL
 Aprenda SQL

Visão geral
Essa cláusula trará em sua consulta os dados que são comuns às duas tabelas, conforme ilustra a Figura 1.

Figura 1. Selecionando todos os dados que são comuns


as duas tabelas

Para os exemplos a seguir considere a estrutura de tabelas abaixo, onde temos uma tabela
chamada produto (Tabela 1), responsável por armazenar todos os produtos do estoque do cliente, a
tabela categoria_produto (Tabela 2), responsável por armazenar todas as categorias existentes no banco de dados,
e a tabela venda_produto (Tabela 3), que relaciona os produtos que foram vendidos.

id nome preco Id_categoria

1 Bola 35.00 1

2 Patinete 120.00 1
3 Carrinho 15.00 1

4 Skate 296.00 1

5 Notebook 3500.00 2

6 Monitor LG 19 450.00 2

O Diário de Anne
7 45.00 3
Frank

8 O dia do Curinga 65.00 3

9 O mundo de Sofia 48.00 3

10 Através do Espelho 38.00 3

Tabela 1. Tabela produto

id nome

1 Infantil

2 Informatica

3 Educacional

Tabela 2. Tabela categoria_produto

id id_produto valor data

1 1 35.00 2018-05-15

2 1 35.00 2018-06-15

3 1 35.00 2018-07-15

4 2 120.00 2018-07-15

5 2 120.00 2018-07-14

6 3 15.00 2018-07-15

7 7 45.00 2018-07-15

8 8 65.00 2018-07-15

9 8 65.00 2018-07-16

10 9 48.00 2018-07-16

11 5 3500.00 2018-07-16

12 5 3500.00 2018-07-16

13 6 450.00 2018-07-16

Tabela 3. Tabela venda_produto

Sintaxe
SELECT
[ tabela1.coluna1, tabela1.coluna2, ... | N.coluna1, N.coluna2, … ]
FROM
[ tabela1 | tabela1 F ]
LEFT JOIN
[ tabelaX | tabelaX N]
ON
[ tabelaX.coluna1 = tabela1.coluna1 | N.coluna1 = F.coluna1 ]

Na prática
Exemplo 1

Para este exemplo, suponha que seja necessário trazer as informações de todos os produtos da tabela produto, e
também trazer o nome da sua respectiva categoria no resultado. Para isso, podemos utilizar o trecho de código
abaixo:

SELECT
P.nome,
P.preco,
C.nome as Categoria
FROM
produto P
INNER JOIN
categoria_produto C
ON P.id_categoria = C.id

No trecho de código acima, nas linhas 1 a 4 selecionamos a coluna nome e a coluna preco da tabela produto, e
em seguida, selecionamos a coluna categoria da tabela categoria.

Em seguida, nas linhas 5 e 6 definimos que a consulta será feita na tabela produto, nomeada de P, e em seguida,
nas linhas 7 e 8 realizamos um INNER JOIN na tabela categoria_produto, nomeada de C, e logo na linha
9 informamos que a condição para a junção das duas tabelas é o ID da categoria ser o mesmo nas duas tabelas.

O resultado da query pode ser visto na Tabela 4.

nome preco categoria

Bola 35.00 infantil

Patinete 120.00 infantil

Carrinho 15.00 infantil

Skate 296.00 infantil

Notebook 3500.00 Informatica

Monitor LG 19 450.00 Informatica

O Diário de Anne Frank 45.00 Educacional


O dia do Curinga 65.00 Educacional

O mundo de Sofia 48.00 Educacional

Através do Espelho 38.00 Educacional

Tabela 4. Consulta de produtos com o nome das categorias

Exemplo 2

Neste exemplo adicionaremos mais um JOIN a essa tabela. Poderíamos incluir nessa consulta acima, o total de
produtos que foram vendidos. Para isso, podemos utilizar a query abaixo:

SELECT
P.nome,
P.preco,
C.nome as Categoria,
COUNT(V.id_produto) TOTAL_VENDIDOS
FROM
produto P
INNER JOIN
categoria_produto C
ON P.id_categoria = C.id
INNER JOIN
venda_produto V
ON V.id_produto = P.id
GROUP BY P.id

No trecho de código acima, nas linhas 1 a 5 selecionamos a coluna nome e a coluna preco da tabela produto,
selecionamos a coluna categoria da tabela categoria e, em seguida, selecionamos o total de ID_PRODUTO na
tabela de venda_produto, nomeada de V.

Em seguida, nas linhas 6 e 7 definimos que a consulta será feita na tabela produto, nomeada de P, e em
seguida, nas linhas 8 e 9 realizamos um INNER JOIN na tabela categoria_produto, nomeada de C, e logo
na linha 10 informamos que a condição para a junção das duas tabelas é o ID da categoria ser o mesmo nas
duas tabelas. Nas linha 11 e 12 adicionamos mais uma tabela, a tabela venda_produto, nomeada de V. Em
seguida, na linha 13 informamos que essa tabela só será adicionada se o id do produto for o mesmo na tabela de
produto e venda_produto. Por fim, agrupamos o resultado por produto, na linha 14.

O resultado da query pode ser visto na Tabela 5.

nome preco categoria TOTAL_VENDIDOS

Bola 35.00 infantil 3

Patinete 120.00 infantil 2

Carrinho 15.00 infantil 1

Notebook 3500.00 Informatica 2

Monitor LG 19 450.00 Informatica 1


O Diário de Anne Frank 45.00 Educacional 1

O dia do Curinga 65.00 Educacional 2

O mundo de Sofia 48.00 Educacional 1

Tabela 5. Listagem de produtos com o nome da categoria e total de vendidos

A palavra-chave INNER JOIN seleciona todas as linhas das duas tabelas, desde que haja correspondência entre
as colunas. Se houver algum registro em uma das tabelas que não tenha correspondência na outra tabela, esses
registros não serão exibidos.

Exemplo 3

Para o exemplo a seguir, considere a estrutura de tabelas abaixo, onde temos a tabela projeto (Tabela 6),
responsável por manter todos os projetos da empresa, e a tabela comentario (Tabela 7), responsável por manter
todos os comentários referentes aos projetos cadastrados no banco de dados.

ID Titulo Data

ID Titulo Data

7 Criando uma aplicação com React 2018-04-10

8 API RestFUL com Lumen 2018-05-10

9 Consumindo uma API RestFUL com Laravel 2018-05-20

10 Documentação SQL 2018-05-21

Tabela 6. Estrutura da tabela projeto

ID Comentario Data id_projeto

1 Muito legal essa aplicação! Adorei usar o React 2018-04-10 7

2 React é muito simples! Curti o projeto! parabéns! 2018-05-10 7

3 Muito top! 2018-05-20 9

4 Parabéns aos envolvidos! 2018-05-20 9

5 Muito legal, sempre gostei do Laravel. 2018-05-20 9

Interessante a forma de recueprar as informações. Não sabia.


6 2018-05-21 9
Gostei!

7 Consigo fazer o mesmo com CodeIgniter? 2018-05-22 9

React é apenas JavaScript, há uma API bem pequena para

aprender, apenas algumas funções e como usá-las. Depois


8 2018-05-23 7
disso, suas habilidades em JavaScript serão o que te farão um

melhor desenvolvedor React

Tabela 7. Estrutura da tabela comentario


Suponha que seja necessário trazer todos os projetos que tenham algum comentário cadastrado. Para isso
podemos utilizar a query abaixo:

SELECT
P.id,
P.titulo
FROM
projetos P
INNER JOIN
comentario C
ON
C.id_projeto = P.id
GROUP BY
P.id

Observe que selecionamos o id e o titulo do projeto e logo na Linha 6 utilizamos INNER JOIN para relacionar
as duas tabelas. Na Linha 9 realizamos o vinculo entre as duas tabelas, onde a coluna id_projeto da tabela
comentario é o mesmo que a coluna id da tabela projeto.

O resultado obtido pode ser visto na abaixo, na Tabela 8:

ID Titulo

7 Criando uma aplicação com React

9 Consumindo uma API RestFUL com Laravel

Tabela 8. Lista de projetos com comentários

Você também pode gostar