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ő:
SELECT 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:
SELECT *
Ahhoz, hogy az adatok minden táblából
ki legyenek választva, a * elé meg kell adni a
tábla nevét:
SELECT users.*, cities.*
Vagy felsorolhatjuk a szükséges mezőket az előttük álló táblanévvel együtt:
SELECT 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:
SELECT 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:
ON 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:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Gyakorlati feladatok
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.