Aprenda / SQL e banco de dados

FundamentosAula 3 de 1618 min0% da trilha

JOIN — juntando tabelas

Como buscar dado que está espalhado em duas tabelas relacionadas, numa consulta só.

Lembra da lição 1: pedidos guarda só usuario_id, não o nome do usuário. Pra mostrar "Ana fez um pedido de R$150", você precisa combinar as duas tabelas — é exatamente pra isso que existe JOIN.

INNER JOIN — só linhas que combinam nos dois lados

SQL
SELECT usuarios.nome, pedidos.total
FROM pedidos
JOIN usuarios ON pedidos.usuario_id = usuarios.id;

ON pedidos.usuario_id = usuarios.id é a regra de combinação — "junte a linha de pedidos com a linha de usuarios onde esses dois valores forem iguais". JOIN sozinho já significa INNER JOIN — só aparecem linhas que existem nos dois lados.

LEFT JOIN — mantém tudo do lado esquerdo, mesmo sem combinação

SQL — usuário sem pedido nenhum ainda
SELECT usuarios.nome, pedidos.total
FROM usuarios
LEFT JOIN pedidos ON pedidos.usuario_id = usuarios.id;

Com INNER JOIN, o Caio (que nunca fez pedido) simplesmente não apareceria. Com LEFT JOIN, todo usuário aparece — os que não têm pedido correspondente mostram NULL na coluna do lado direito. Use LEFT JOIN quando "não ter combinação" ainda é uma resposta que importa (ex.: "quais usuários nunca compraram nada?").

Juntando 3 tabelas

SELECT usuarios.nome, produtos.nome AS produto, itens_pedido.quantidade
FROM itens_pedido
JOIN pedidos ON itens_pedido.pedido_id = pedidos.id
JOIN usuarios ON pedidos.usuario_id = usuarios.id
JOIN produtos ON itens_pedido.produto_id = produtos.id;

AS produto é um apelido — sem ele, duas colunas chamadas nome (uma de usuários, outra de produtos) ficariam ambíguas no resultado.

Exercício

Escreva a consulta que lista o nome de todo usuário e o total de pedidos dele, incluindo usuários que nunca fizeram nenhum pedido (mostrando 0 ou NULL nesse caso).

Quiz rápido

Qual a diferença entre INNER JOIN e LEFT JOIN?
Pra que serve a cláusula ON num JOIN?