Získavanie údajov z prepojených tabuliek v Pythone
Urobme požiadavku, ktorá načíta
všetkých používateľov spolu s ich mestami. Na to
bude potrebný príkaz LEFT
JOIN:
Jeho syntax vyzerá nasledovne:
SELECT polia FROM nazov_tabulky
LEFT JOIN nazov_prepojenej_tabulky ON podmienka_prepojenia
WHERE podmienka_vyberu
Poďme si rozobrať jednotlivé časti syntaxe tohto príkazu.
Polia
Pretože výber ide z viacerých tabuliek,
výber všetkých polí cez * nebude
fungovať. Nasledujúca požiadavka vyberie
polia len z hlavnej tabuľky, ale nie z
prepojenej:
SELECT *
Aby sa údaje vyberali zo všetkých
tabuliek, je potrebné pred * uviesť názov
tabuľky pre výber:
SELECT users.*, cities.*
Alebo je možné vymenovať potrebné polia s uvedením názvu tabuľky pred nimi:
SELECT users.name, cities.name
Tieto dva spôsoby majú problém. Spočíva v tom, že ak majú polia v tabuľkách rovnaké názvy, v poli Python dôjde ku konfliktu mien a vyhrá len jedno pole, a druhé nebude.
Na vyriešenie problému je potrebné konfliktné
názvy premenovať pomocou príkazu
as:
SELECT users.name, cities.name as city_name
Prepojenie
Po príkaze ON musíme uviesť
polia z dvoch tabuliek, podľa ktorých sa uskutočňuje
prepojenie. V našom prípade to bude pole id
z tabuľky s mestami a pole city_id
z tabuľky s používateľmi:
ON cities.id=users.city_id
Požiadavka
Výsledná požiadavka, ktorá načíta používateľov spolu s ich mestami bude vyzerať nasledovne:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktické úlohy
Nech existuje tabuľka s produktami a tabuľka s ich kategóriami. Napíšte požiadavku, ktorá načíta názvy produktov spolu s ich kategóriami.