Adatok lekérése kapcsolt táblákból Pythonban

Készítsünk egy lekérdezést, amely kilistázza az összes felhasználót a városaikkal együtt. Ehhez szükség lesz a LEFT JOIN parancsra:

Szintaxisa a következő:

sqlSELECT mezők FROM tábla_neve
  LEFT JOIN kapcsolt_tábla_neve ON kapcsolat_feltétele
WHERE kiválasztási_feltétel

Nézzük meg részletesen a parancs szintaxisának egyes részeit.

Mezők

Mivel a kiválasztás több táblából történik, az összes mező kiválasztása a * használatával nem fog működni. A következő lekérdezés csak az alapértelmezett tábla mezőit választja ki, de nem a kapcsolt táblából:

sqlSELECT *

Ahhoz, hogy az adatok minden táblából ki legyenek választva, a * elé meg kell adni a tábla nevét:

sqlSELECT users.*, cities.*

Vagy felsorolhatjuk a szükséges mezőket az előttük álló táblanévvel együtt:

sqlSELECT users.name, cities.name

Ennek a két módszernek van egy problémája. Az, hogy ha a táblák mezőinek neve megegyezik, akkor a Python tömbjében névütközés következik be, és csak az egyik mező marad meg, a másik pedig nem lesz jelen.

A probléma megoldásához az ütköző neveket át kell nevezni a as paranccsal:

sqlSELECT users.name, cities.name as city_name

Kapcsolat

A ON parancs után meg kell adnunk a két tábla azon mezőit, amelyek alapján a kapcsolat létrejön. Esetünkben ez a id mező a városok táblájából és a city_id mező a felhasználók táblájából:

sqlON cities.id=users.city_id

Lekérdezés

Végeredményben a felhasználók városaikkal együtt történő lekérdezésének a lekérdezése a következőképpen fog kinézni:

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

Gyakorlati feladatok

Задание 1

Tegyük fel, hogy van egy termékek táblája és egy tábla a kategóriáikkal. Írj egy lekérdezést, ami lekéri a termékek neveit a kategóriáikkal együtt.