Obtendo dados de tabelas relacionadas em Python
Vamos fazer uma consulta que irá buscar
todos os usuários junto com suas cidades. Para isso
será necessário o comando LEFT
JOIN:
Sua sintaxe é a seguinte:
SELECT campos FROM nome_da_tabela
LEFT JOIN nome_da_tabela_relacionada ON condição_de_ligação
WHERE condição_de_seleção
Vamos analisar as partes individuais da sintaxe deste comando.
Campos
Como a seleção é feita a partir de várias tabelas,
selecionar todos os campos com * não
funcionará. A seguinte consulta selecionará
campos apenas da tabela principal, mas não da
tabela relacionada:
SELECT *
Para que os dados sejam selecionados de todas
as tabelas, é necessário especificar o nome
da tabela antes do *:
SELECT users.*, cities.*
Ou pode-se listar os campos que precisamos especificando o nome da tabela antes deles:
SELECT users.name, cities.name
Estas duas formas têm um problema. A questão é que se os campos nas tabelas tiverem o mesmo nome, no array Python haverá um conflito de nomes e apenas um campo "vencerá", e o segundo não estará presente.
Para resolver o problema, é necessário renomear os
nomes em conflito usando o comando
as:
SELECT users.name, cities.name as nome_da_cidade
Ligação (JOIN)
Após o comando ON, devemos especificar
os campos das duas tabelas pelos quais a
ligação é feita. No nosso caso, será o campo id
da tabela de cidades e o campo city_id
da tabela de usuários:
ON cities.id=users.city_id
Consulta
No final, a consulta que irá buscar os usuários junto com suas cidades ficará da seguinte forma:
SELECT
users.name, cities.name as nome_da_cidade
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Tarefas práticas
Suponha que você tenha uma tabela de produtos e uma tabela de suas categorias. Escreva uma consulta que irá buscar os nomes dos produtos junto com suas categorias.