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:

sqlSELECT 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:

sqlSELECT *

For at data skal hentes fra alle tabellene, må du før * spesifisere navnet på tabellen det skal hentes fra:

sqlSELECT users.*, cities.*

Alternativt kan du liste opp feltene vi trenger med angivelse av tabellnavn foran dem:

sqlSELECT 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:

sqlSELECT 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:

sqlON cities.id=users.city_id

Spørring

Til slutt vil spørringen som henter brukere sammen med byene deres se slik ut:

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

Praktiske oppgaver

Задание 1

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.