Hämta data från relaterade tabeller i Python

Låt oss skapa en förfrågan som hämtar alla användare tillsammans med deras städer. För detta behövs kommandot LEFT JOIN:

Dess syntax ser ut på följande sätt:

sqlSELECT fält FROM tabellnamn
  LEFT JOIN relaterad_tabell ON villkor_för_relation
WHERE villkor_för_urval

Låt oss gå igenom delarna av syntaxen för detta kommando.

Fält

Eftersom urvalet görs från flera tabeller, kommer urval av alla fält via * inte att fungera. Följande förfrågan väljer fält endast från huvudtabellen, men inte från den relaterade tabellen:

sqlSELECT *

För att data ska hämtas från alla tabeller, måste man före * ange tabellnamnet för urvalet:

sqlSELECT users.*, cities.*

Alternativt kan man lista de fält vi behöver med angivelse av tabellnamnet före dem:

sqlSELECT users.name, cities.name

Dessa två sätt har ett problem. Saken är den att om fälten i tabellerna har samma namn, kommer en namngodskonflikt att uppstå i Python-arrayen och bara ett fält kommer att vinna, medan det andra inte kommer att finnas med.

För att lösa problemet måste man byta namn på de konfliktfyllda namnen via kommandot as:

sqlSELECT users.name, cities.name as city_name

Relation

Efter kommandot ON måste vi ange fälten från de två tabellerna som relationen sker mellan. I vårt fall blir det fältet id från tabellen med städer och fältet city_id från tabellen med användare:

sqlON cities.id=users.city_id

Förfrågan

Så småningom kommer förfrågan som hämtar användare tillsammans med deras städer att se ut så här:

sqlSELECT
  users.name, cities.name as city_name
FROM
  users
LEFT JOIN cities ON cities.id=users.city_id

Praktiska uppgifter

Задание 1

Antag att du har en tabell med produkter och en tabell med deras kategorier. Skriv en förfrågan som hämtar produktnamnen tillsammans med deras kategorier.