Lembrete: dados distribuídos em tabelas
No módulo anterior você viu o design relacional: a informação se distribui em
várias tabelas e cada produto referencia sua categoria por meio de uma chave
estrangeira (categoria_id aponta para categorias.id) em vez de repetir o
nome. Aqui partimos desse design já pronto e nos concentramos na pergunta que
ficou pendente: como voltamos a juntar essas tabelas para consultá-las?
| produtos.id | nome | categoria_id | categorias.id | nome | |
|---|---|---|---|---|---|
| 1 | Teclado | 1 | 1 | Perifericos | |
| 3 | Monitor | 2 | 2 | Telas |
Voltar a unir: INNER JOIN
Para ver o nome da categoria junto ao do produto é preciso combinar ambas as
tabelas. Isso é um JOIN: você emparelha linhas de uma tabela com linhas de
outra de acordo com uma condição.
SELECT produtos.nome, categorias.nome
FROM produtos
INNER JOIN categorias ON produtos.categoria_id = categorias.id;
FROM produtos: a tabela de partida.INNER JOIN categorias: a tabela que você quer combinar.ON ...: a condição de emparelhamento, normalmentechave_estrangeira = chave_primaria.
O INNER JOIN só mantém as linhas que têm par em ambos os lados. Um produto
com categoria_id que não existe em categorias (ou NULL) desaparece do
resultado. Veremos isso em detalhe na próxima lição.
Como duas tabelas podem ter colunas com o mesmo nome (aqui,
nomeem ambas), convém qualificá-las com o nome da tabela:produtos.nome,categorias.nome.
Exemplos
INNER JOIN: produto e nome de sua categoria
-- Só aparecem os produtos que têm categoria atribuída.
SELECT produtos.nome, categorias.nome AS categoria
FROM produtos
INNER JOIN categorias ON produtos.categoria_id = categorias.id;