Pridobivanje podatkov iz povezanih tabel v Pythonu

Naredimo poizvedbo, ki bo pridobila vse uporabnike skupaj z njihovimi mesti. Za to bo potreben ukaz LEFT JOIN:

Njen sintaksa je naslednja:

sqlSELECT polja FROM ime_tabele
  LEFT JOIN ime_povezane_tabele ON pogoj_povezave
WHERE pogoj_izbire

Razložimo posamezne dele sintakse tega ukaza.

Polja

Ker gre za izbor iz več tabel, izbira vseh polj prek * ne bo delovala. Naslednja poizvedba bo izbrala polja samo iz glavne tabele, ne pa iz povezane:

sqlSELECT *

Da se podatki izberejo iz vseh tabel, je treba pred * navesti ime tabele za izbor:

sqlSELECT users.*, cities.*

Lahko tudi naštejemo želena polja z navedbo imena tabele pred njimi:

sqlSELECT users.name, cities.name

Ti dve metodi imata težavo. Bistvo je v tem, da če imajo polja v tabelah enaka imena, bo v matriki Python prišlo do konflikta imen in zmagalo bo samo eno polje, drugega pa ne bo.

Za rešitev problema je treba konfliktna imena preimenovati prek ukaza as:

sqlSELECT users.name, cities.name as city_name

Povezava

Po ukazu ON moramo navesti polja iz dveh tabel, po katerih se izvaja povezava. V našem primeru bo to polje id iz tabele z mesti in polje city_id iz tabele z uporabniki:

sqlON cities.id=users.city_id

Poizvedba

Kot rezultat bo poizvedba, ki bo pridobila uporabnike skupaj z njihovimi mesti, videti takole:

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

Praktične naloge

Задание 1

Recimo, da imate tabelo z izdelki in tabelo z njihovimi kategorijami. Napišite poizvedbo, ki bo pridobila imena izdelkov skupaj z njihovimi kategorijami.