Voltar para a lista de artigos Artigos
9 minutos de leitura

Explicações sobre SQL JOINs: 5 exemplos claros de SQL INNER JOIN para iniciantes

Está procurando uma explicação clara das junções em SQL? Confira estes cinco exemplos de SQL INNER JOIN!

No SQL, INNER JOINs pode ser um pouco difícil para os iniciantes dominarem. Mas, quando você começar a trabalhar com elas, verá que são muito úteis! Vamos discutir cinco exemplos de SQL INNER JOINs. Mas, primeiro, vamos fazer uma rápida revisão do motivo pelo qual os JOINs são importantes.

Nos bancos de dados relacionais, os dados são organizados e armazenados em tabelas. Cada tabela representa um tipo específico de informação. Mas, muitas vezes, você precisa analisar dados de diferentes tabelas simultaneamente. E é aí que os JOINs entram em cena.

Recomendamos que você pratique a união de tabelas seguindo nosso Cláusulas JOIN em SQL curso interativo. Ele inclui 93 exercícios que abrangem os seguintes tópicos:

  • Tipos de SQL JOIN.
  • JOINs múltiplos.
  • Self-joins, ou seja, união de uma tabela com ela mesma.
  • JOINs não-equi.

Então, você está pronto para ver alguns exemplos de INNER JOIN? Vamos começar!

Unindo tabelas: Apresentando as operações SQL JOIN

Cláusulas JOIN em SQL combinam dados de duas ou mais tabelas com base em valores de coluna correspondentes. Por exemplo, você pode mesclar as informações dos clientes com os pedidos que eles fizeram ou vincular cada produto a seus fornecedores.

Cláusulas JOIN em SQL As operações SQL JOIN permitem unir dados de diferentes tabelas e extrair informações significativas para seu caso de uso específico. Confira esta Folha de consulta SQL JOIN para ter uma visão geral dos diferentes tipos de JOINs.

Um INNER JOIN em SQL combina linhas de várias tabelas combinando seus valores de coluna comuns. Ao aplicar um INNER JOIN para vincular os dados do cliente aos pedidos correspondentes, você verá uma lista de clientes que fizeram pelo menos um pedido.

Exemplos de SQL INNER JOIN para iniciantes

Além de INNER JOIN, o SQL também oferece outros tipos de junções: LEFT JOIN, RIGHT JOIN, e FULL JOIN. Essas uniões são chamadas de OUTER JOINs. Diferentemente de uma operação INNER JOIN, uma operação OUTER JOIN pode listar linhas de ambas as tabelas, mesmo que não haja correspondência.

Exemplos de SQL INNER JOIN para iniciantes

Vamos dar uma olhada em um exemplo para entender melhor a natureza de SQL INNER JOINs.

Aqui está a tabela customers que armazena as informações do cliente:

customer_idfirst_namelast_nameemail
1CoryCastillocc@email.com
2ElliePottsep@email.com
3JackGreerjg@email.com

E aqui está a tabela orders tabela que armazena todos os pedidos feitos pelos clientes:

order_idcustomer_idorder_dateorder_amount
2716/6/2023100.00
2827/7/2023150.00
2918/8/202320.00

A coluna comum (mostrada em rosa) na qual as colunas customers e orders são unidas é a coluna customer_id.

Agora, aqui está a consulta:

SELECT 
  c.customer_id, 
  c.email, 
  o.order_date, 
  o.order_amount
FROM customers AS c
INNER JOIN orders AS o
ON c.customer_id = o.customer_id;

Essa consulta une a tabela customers (com o alias AS c) e a tabela orders (com o pseudônimo AS o). Esses aliases de tabela fornecem uma maneira clara de informar ao banco de dados a tabela de origem de cada coluna (usando a sintaxe table_alias.column_name).

Esses aliases são empregados na cláusula ON para estabelecer a coluna para unir tabelas. Também os usamos na instrução SELECT, em que duas colunas são selecionadas da tabela de clientes (c.customer_id and c.email) e outras duas colunas da tabela orders (o.order_date and o.order_amount).

Aqui está o resultado da consulta:

customer_idemailorder_dateorder_amount
1cc@email.com6/6/2023100.00
2ep@email.com7/7/2023150.00
1cc@email.com8/8/202320.00

Você pode observar que o cliente com o ID 3 não aparece na tabela resultante. Esse cliente específico ainda não fez nenhum pedido; portanto, ele não tem nenhum registro correspondente na tabela orders na tabela.

A palavra-chave INNER JOIN é intercambiável com a palavra-chave JOIN. Em outras palavras, quando você usa JOIN, o banco de dados a interpreta como uma notação abreviada para INNER JOIN.

Para saber mais sobre INNER JOINs, consulte nosso artigo What Is an Inner Join in SQL?

Exemplos de SQL INNER JOIN na prática

Vamos explorar alguns exemplos do SQL INNER JOIN feitos sob medida para iniciantes. Antes de começar a ver os exemplos, confira este artigo sobre como praticar Cláusulas JOIN em SQL.

Exemplo 1: Vincular livros a autores

Você tem duas tabelas que armazenam informações sobre livros e autores. Junte essas tabelas para ver a lista de livros e seus autores.

Aqui está a tabela books tabela:

book_idtitlepublication_yearauthor_id
1Frankenstein181822
2The Time Machine189523
3The Martian201124
42001: A Space Odyssey196825
5Dune196526

A coluna book_id identifica cada livro de forma exclusiva. E a coluna author_id atribui um autor a cada livro.

E aqui está a authors tabela:

author_idauthor_name
22Mary Shelley
23H. G. Wells
24Andy Weir
25Arthur C. Clarke
26Frank Herbert

A coluna author_id identifica exclusivamente cada autor. E a coluna author_name armazena os nomes completos dos autores.

Se quiser ver os títulos dos livros e os nomes dos autores, você pode unir essas tabelas com base em sua coluna comum (a coluna author_id em ambas as tabelas). Basta selecionar title from books e author_name from authors:

SELECT 
  b.title, 
  a.author_name
FROM books AS b
INNER JOIN authors AS a
ON b.author_id = a.author_id;

Esta é a tabela resultante:

titleauthor_name
FrankensteinMary Shelley
The Time MachineH. G. Wells
The MartianAndy Weir
2001: A Space OdysseyArthur C. Clarke
DuneFrank Herbert

Observe que a cada livro é atribuído um autor e a cada autor é atribuído um livro, pois não há valores duplicados na coluna comum author_id. Examine o próximo exemplo para ver o que acontece se a coluna comum tiver valores duplicados.

Exemplo 2: Atribuir produtos a categorias

Você tem duas tabelas que armazenam produtos e categorias de produtos. Junte-se a essas tabelas para ver a lista de produtos com suas categorias.

Aqui está a tabela products tabela:

product_idproduct_namecategory_id
1Apple22
2Orange22
3Potato23
4Carrot23
5Chocolate24

A coluna product_id identifica cada produto de forma exclusiva. E a coluna category_id atribui uma categoria a cada produto.

E aqui está a categories tabela:

category_idcategory_name
22Fruits
23Vegetables
24Snacks

A coluna category_id identifica exclusivamente cada categoria. E a coluna category_name armazena os nomes completos das categorias.

Se quiser ver os produtos e suas categorias, você pode unir essas tabelas com base em sua coluna comum, que é a coluna category_id. Aqui está a consulta:

SELECT 
  p.product_name, 
  c.category_name
FROM products AS p
INNER JOIN categories AS c
ON p.category_id = c.category_id;

Esta é a tabela resultante:

product_namecategory_name
AppleFruits
OrangeFruits
PotatoVegetables
CarrotVegetables
ChocolateSnacks

As categorias com IDs 22 e 23 são atribuídas a dois produtos cada; seus nomes aparecem duas vezes na tabela de saída.

Exemplo 3: Listar médicos e pacientes com o mesmo primeiro nome

Você tem duas tabelas que armazenam informações sobre médicos e pacientes. Junte-se a essas tabelas para ver a lista de médicos e pacientes que compartilham o mesmo primeiro nome.

Aqui está a tabela doctors tabela:

doctor_idfirst_namelast_name
1SamanthaMonroe
2MelvinFerrell
3AlbieBlake
4RoseBernard
5LouiPeterson

A coluna doctor_id identifica cada médico de forma exclusiva. As outras duas colunas armazenam o nome e o sobrenome dos médicos.

E aqui está a patients tabela:

patient_idfirst_namelast_name
23BenWoodward
24SamanthaThomson
25KateDonovan
26AlbieVasquez
27LouiChen

A coluna patient_id identifica exclusivamente cada paciente. As outras duas colunas armazenam o nome e o sobrenome dos pacientes.

Se quiser ver a lista de médicos e pacientes que compartilham o mesmo primeiro nome, você pode unir essas tabelas com base na coluna first_name.

SELECT d.*, p.*
FROM doctors AS d
INNER JOIN patients AS p
ON d.first_name = p.first_name;

Observe que d.* define todas as colunas da tabela doctors e p.* define todas as colunas da tabela patients da tabela.

Esta é a tabela resultante:

doctor_idfirst_namelast_namepatient_idfirst_namelast_name
1SamanthaMonroe24SamanthaThomson
3AlbieBlake26AlbieVasquez
5LouiPeterson27LouiChen

Graças à operação INNER JOIN, você pode listar apenas os pares de médico e paciente em que os primeiros nomes são iguais.

Exemplo 4: Combinar pessoas com apartamentos adequados

Você tem duas tabelas que armazenam informações sobre apartamentos disponíveis para aluguel e pessoas procurando apartamentos que se encaixem em sua faixa de preço. Junte essas tabelas para ver quais apartamentos podem ser alugados por qual pessoa.

Aqui está a tabela apartments tabela:

apartment_idrent
11000
2700
3500

A coluna apartment_id identifica exclusivamente cada apartamento. E a coluna rent armazena o valor do aluguel mensal.

E aqui está a persons tabela:

person_idemailmax_rent
23ab@email.com900
24cd@email.com600
25ef@email.com3000

A coluna person_id identifica exclusivamente cada pessoa que está procurando um apartamento para alugar. A coluna email armazena os e-mails dessas pessoas e a coluna max_rent armazena o valor máximo de aluguel mensal que elas podem pagar pelo apartamento.

Se quiser ver quais apartamentos podem ser alugados por qual pessoa, você pode unir essas tabelas com base nas colunas rent e max_rent:

SELECT 
  p.person_id, 
  p.email,
  a.apartment_id, 
  a.rent AS apartment_rent
FROM apartments AS a
INNER JOIN persons AS p
ON a.rent < p.max_rent;

Aqui, a correspondência deve ser feita entre a coluna de aluguel da tabela apartments e a coluna max_rent da tabela persons tabela, onde rent < max_rent.

Essa é a tabela resultante:

person_idemailapartment_idapartment_rent
25ef@email.com11000
23ab@email.com2700
25ef@email.com2700
23ab@email.com3500
24cd@email.com3500
25ef@email.com3500

Ao usar a cláusula ON com a condição que contém o sinal <, várias linhas da apartments foram atribuídas a várias linhas da tabela persons tabela, e vice-versa. E você pode ver quais apartamentos são adequados para alugar para quais pessoas.

Exemplo 5: unir tabelas de continentes, países e cidades

Desta vez, você tem três tabelas que armazenam informações sobre continentes, países e cidades. Junte essas tabelas para saber qual cidade pertence a qual país e qual país pertence a qual continente.

Aqui está a tabela continents que armazena todos os continentes:

continent_idcontinent_name
1Asia
2Africa
3North America
4South America
5Antarctica
6Europe
7Australia

A coluna continent_id identifica cada continente de forma exclusiva. E a coluna continent_name armazena seu nome completo.

Aqui está a tabela countries tabela que armazena os países selecionados:

country_idcountry_namecontinent_id
23United States3
24Brazil4
25South Africa2
26Japan1
27Poland6

A coluna country_id identifica exclusivamente cada país. A coluna country_name armazena seu nome completo. E a coluna continent_id armazena o continente em que o país está localizado.

E aqui está a tabela cities tabela que armazena as cidades selecionadas:

city_idcity_namecountry_id
33Rio de Janeiro24
34New York23
35Tokyo26
36Warsaw27
37Cape Town25

A coluna city_id identifica exclusivamente cada cidade. A coluna city_name armazena seu nome completo. E a coluna country_id armazena o país onde a cidade está localizada.

Se quiser ver quais cidades, países e continentes estão juntos, você pode unir essas três tabelas com base em suas colunas comuns:

SELECT 
  cont.continent_name, 
  coun.country_name, 
  ci.city_name
FROM continents AS cont
INNER JOIN countries AS coun
ON cont.continent_id = coun.continent_id
INNER JOIN cities AS ci
ON coun.country_id = ci.country_id;

A tabela continent é unida à tabela countries em sua coluna comum (continent_id). E a tabela countries é unida à tabela cities em sua coluna comum (country_id).

Esta é a tabela resultante:

continent_namecountry_namecity_name
AsiaJapanTokyo
AfricaSouth AfricaCape Town
North AmericaUnited StatesNew York
South AmericaBrazilRio de Janeiro
EuropePolandWarsaw

As três tabelas são unidas em suas colunas comuns e o comando SELECT lista os nomes de continente, país e cidade com base na união entre as colunas de ID.

Confira este artigo sobre junção de três ou mais tabelas no SQL para obter mais exemplos de junções de várias tabelas.

Sua vez de praticar exemplos de INNER JOIN em SQL

Ao longo deste artigo, nos aprofundamos nas complexidades do INNER JOIN em SQL, desde os conceitos básicos até cenários mais avançados. Usamos várias condições JOIN e até unimos três tabelas. Como vimos, o poder do INNER JOIN está em sua capacidade de conectar conjuntos de dados sem problemas, o que nos permite extrair insights valiosos.

Você precisa de mais exemplos de SQL INNER JOIN? Experimente todos os tipos de JOINs seguindo nosso curso sobre Cláusulas JOIN em SQL que mencionamos anteriormente. Você terá toda a prática que precisa para se sentir confortável ao escrever JOINs.

Boa sorte!