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
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
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).