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:

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

sqlSELECT *

Aby sa údaje vyberali zo všetkých tabuliek, je potrebné pred * uviesť názov tabuľky pre výber:

sqlSELECT users.*, cities.*

Alebo je možné vymenovať potrebné polia s uvedením názvu tabuľky pred nimi:

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

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

sqlON cities.id=users.city_id

Požiadavka

Výsledná požiadavka, ktorá načíta používateľov spolu s ich mestami bude vyzerať nasledovne:

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

Praktické úlohy

Задание 1

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.