Henting av data fra relaterte tabeller i Python
La oss lage en spørring som henter
alle brukere sammen med byene deres. For å gjøre dette
trengs kommandoen LEFT
JOIN:
Syntaksen ser slik ut:
SELECT felter FROM tabellnavn
LEFT JOIN relatert_tabellnavn ON tilkoblingsbetingelse
WHERE utvalgsbetingelse
La oss gå gjennom delene av syntaksen til denne kommandoen.
Felter
Siden utvalget kommer fra flere tabeller,
vil ikke utvalg av alle felter via *
fungere. Følgende spørring vil velge
felter kun fra hovedtabellen, men ikke fra
den relaterte:
SELECT *
For at data skal hentes fra alle
tabellene, må du før * spesifisere navnet
på tabellen det skal hentes fra:
SELECT users.*, cities.*
Alternativt kan du liste opp feltene vi trenger med angivelse av tabellnavn foran dem:
SELECT users.name, cities.name
Disse to måtene har et problem. Saken er at hvis feltene i tabellene har like navn, vil det i Python-listen oppstå en navnekonflikt og bare ett felt vinne, og det andre vil ikke være der.
For å løse problemet må du endre de konfliktfylte
navnene via kommandoen
as:
SELECT users.name, cities.name as city_name
Tilkobling
Etter kommandoen ON må vi spesifisere
felter fra de to tabellene som
utgjør tilkoblingen. I vårt tilfelle vil det være feltet id
fra bytabellen og feltet city_id
fra brukertabellen:
ON cities.id=users.city_id
Spørring
Til slutt vil spørringen som henter brukere sammen med byene deres se slik ut:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiske oppgaver
Anta at du har en tabell med produkter og en tabell med deres kategorier. Skriv en spørring som henter produktnavnene sammen med kategoriene deres.