Преузимање података из повезаних табела у Пајтону

Хајде да направимо упит који ће преузети све кориснике заједно са њиховим градовима. За ово ће бити потребна команда LEFT JOIN:

Њен синтакс изгледа овако:

sqlSELECT поља FROM име_табеле
  LEFT JOIN име_повезане_табеле ON услов_везе
WHERE услов_селекције

Хајде да размотримо поједине делове синтаксе ове команде.

Поља

Пошто се селекција врши из више табела, селекција свих поља преко * неће функционисати. Следећи упит ће изабрати поља само из главне табеле, али не и из повезане:

sqlSELECT *

Да би се подаци бирали из свих табела, потребно је пре * навести име табеле за селекцију:

sqlSELECT users.*, cities.*

Или се могу навести поља која су нам потребна са навођењем имена табеле испред њих:

sqlSELECT users.name, cities.name

Ова два начина имају проблем. Ствар је у томе што ако поља у табелама имају иста имена, у низу Пајтон ће доћи до конфликта имена и победиће само једно поље, а друго неће бити присутно.

За решавање проблема потребно је конфликтна имена преименовати преко команде as:

sqlSELECT users.name, cities.name as city_name

Веза

После команде ON морамо навести поља из две табеле, по којима се остварује веза. У нашем случају то ће бити поље id из табеле са градовима и поље city_id из табеле са корисницима:

sqlON cities.id=users.city_id

Упит

На крају, упит који ће преузети кориснике заједно са њиховим градовима ће изгледати овако:

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

Практични задаци

Задание 1

Претпоставимо да имате табелу са производима и табелу са њиховим категоријама. Напишите упит, који ће преузети називе производа заједно са њиховим категоријама.