0Pricing
Coding Interview Prep · Aula

Unindo três ou mais tabelas

Encadeie junções e raciocine sobre conjuntos de resultados intermediários.

Unindo três ou mais tabelas é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.

As junções formam uma cadeia, não ramificações

Os problemas reais de entrevista raramente terminam em duas tabelas. Será pedido que você faça junções com três, quatro ou mais tabelas. A ideia principal que acalma a complexidade é: uma junção de várias tabelas é apenas uma sequência de junções entre duas tabelas.

O banco de dados combina as duas primeiras em um resultado intermediário, depois combina esse resultado com a terceira, e assim por diante. Se você consegue raciocinar sobre uma junção, consegue raciocinar sobre uma cadeia delas.

O esquema de três tabelas

Ampliamos nosso exemplo com uma terceira tabela. Agora temos clientes, seus pedidos e os produtos referenciados por cada pedido.

  • customers(id, name)
  • orders(id, customer_id, product_id, amount)
  • products(id, title)

Duas relações as conectam: orders.customer_id = customers.id e orders.product_id = products.id.

customers(id, name)
orders(id, customer_id, product_id, amount)
products(id, title)

A consulta básica com três tabelas

Encadeie as junções uma após a outra. Cada JOIN ... ON adiciona uma tabela e especifica como ela se conecta ao que veio antes.

Leia de cima para baixo: comece por pedidos, associe o cliente correspondente e, em seguida, associe o produto correspondente. Cada linha de pedido passa a incluir um nome e o título de um produto.

SELECT c.name, p.title, o.amount
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id;

Pense em conjuntos de resultados intermediários

O modelo mental que facilita as junções entre várias tabelas: depois de cada JOIN, imagine o resultado intermediário obtido até aquele momento.

  • Depois da junção 1: colunas de pedidos + colunas do cliente.
  • Depois da junção 2: esse resultado + colunas do produto.

A próxima cláusula ON pode fazer referência a qualquer coluna já presente no conjunto intermediário, e é por isso que a ordem das junções afeta o que você pode escrever em cada ON.

Cada ON enxerga as tabelas anteriores

Uma consequência importante: a cláusula ON de uma junção posterior pode fazer referência a qualquer tabela associada antes dela, não apenas à tabela que está sendo adicionada.

Aqui, a terceira junção se conecta a o (pedidos), que já estava no escopo. Você também poderia conectar uma quarta tabela a c ou p, pois ambas já fazem parte do resultado acumulado.

SELECT c.name, p.title, w.region
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id
JOIN warehouses w ON w.id = o.warehouse_id; -- refers to o

Comece pela tabela central

Uma dica prática para entrevistas ao vivo: comece o FROM pela tabela de fatos / central (geralmente a que fica no centro das relações) e depois avance para fora, em direção às tabelas de referência.

Pedidos ficam no centro, contendo chaves estrangeiras para clientes e produtos; por isso, começar por eles mantém cada cláusula ON simples e com referências apenas ao que já foi definido.

-- orders is central: it links to both sides
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id

A expansão se acumula nas cadeias

Tudo o que você aprendeu sobre expansão continua valendo, e ela se acumula. Se cada pedido tiver muitos itens e cada item tiver muitas linhas de impostos, a quantidade de linhas se multiplica a cada etapa.

Quando uma agregação parece grande demais em uma consulta com várias junções, suspeite de uma expansão introduzida por uma das junções intermediárias e verifique individualmente a granularidade de cada junção.

-- rows = orders * items_per_order * tax_rows_per_item
SELECT o.id
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN item_taxes  t ON t.item_id  = i.id;

Misturando tipos de junção em uma cadeia

Você pode combinar INNER e LEFT JOIN em uma única consulta, mas a ordem importa. Depois que uma operação LEFT JOIN introduz valores NULL, uma operação INNER JOIN posterior que faça referência a essas colunas NULL pode eliminar as linhas preservadas.

Aqui, se um cliente não tiver pedidos, a operação LEFT JOIN o mantém com o identificador do produto definido como NULL, e a operação INNER JOIN seguinte com produtos o remove novamente — um erro fácil de cometer sob pressão.

SELECT c.name, p.title
FROM customers c
LEFT JOIN orders  o ON o.customer_id = c.id
JOIN products p ON p.id = o.product_id;
-- the INNER products join can cancel the LEFT JOIN

Mantendo as junções externas como externas

Para preservar até o fim os clientes sem pedidos, torne a junção seguinte também LEFT. Assim, os valores NULL chegam ao final com segurança.

Regra prática: depois que você usa uma junção externa, continue usando junções externas para todas as tabelas ligadas ao ramo opcional.

SELECT c.name, p.title
FROM customers c
LEFT JOIN orders   o ON o.customer_id = c.id
LEFT JOIN products p ON p.id = o.product_id;
-- customers with no orders are now kept (NULL title)

Nomes alternativos se tornam essenciais em grande escala

Com quatro ou cinco tabelas, várias podem compartilhar nomes de colunas como id, name ou created_at. Nomes alternativos curtos e consistentes eliminam ambiguidades e mantêm a consulta legível.

Escolha nomes alternativos que indiquem a tabela (c, o, p) e qualifique todas as colunas. Os entrevistadores interpretam o uso que você faz desses nomes como um sinal de como escreve SQL de produção.

SELECT c.id   AS customer_id,
       o.id   AS order_id,
       p.id   AS product_id,
       p.title
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id;

Tabelas de ligação para relações muitos-para-muitos

Quando duas entidades têm uma relação muitos-para-muitos, uma terceira tabela de ligação (ponte) fica entre elas, e você faz as junções passando por ela. Estudantes e cursos se conectam por meio de matrículas.

Reconhecer que é necessário passar por uma tabela de ligação é, por si só, um sinal comum em entrevistas.

SELECT s.name, c.title
FROM students s
JOIN enrollments e ON e.student_id = s.id
JOIN courses     c ON c.id = e.course_id;

Verificação rápida

Analise uma cadeia de junções mistas.

Recapitulação: juntando três ou mais tabelas

Leve estes pontos para a entrevista:

  • Uma junção entre várias tabelas é uma cadeia de junções entre duas tabelas; raciocine sobre o resultado intermediário após cada etapa.
  • Uma cláusula ON posterior pode fazer referência a qualquer tabela anterior na cadeia.
  • Comece pela tabela central e avance para as tabelas de referência.
  • A expansão se acumula ao longo das junções; verifique a granularidade em cada etapa.
  • Uma INNER JOIN depois de uma LEFT JOIN pode anulá-la; mantenha as junções externas para preservar as linhas opcionais.
  • As relações muitos-para-muitos são estabelecidas por meio de uma tabela de ligação.

Perguntas Frequentes

A aula “Unindo três ou mais tabelas” é grátis?

Sim — o texto completo de “Unindo três ou mais tabelas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.

O que vou aprender em “Unindo três ou mais tabelas”?

Encadeie junções e raciocine sobre conjuntos de resultados intermediários. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Coding Interview Prep?

Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Unindo três ou mais tabelas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Coding Interview Prep?

Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Como INNER JOIN faz correspondência entre linhas
  2. ON versus WHERE em junções
  3. Expansão de junções e multiplicação de linhas
  4. Unindo três ou mais tabelas
← Voltar para Coding Interview Prep