Преузимање података из повезаних табела у Пајтону
Хајде да направимо упит који ће преузети
све кориснике заједно са њиховим градовима. За ово
ће бити потребна команда LEFT
JOIN:
Њен синтакс изгледа овако:
SELECT поља FROM име_табеле
LEFT JOIN име_повезане_табеле ON услов_везе
WHERE услов_селекције
Хајде да размотримо поједине делове синтаксе ове команде.
Поља
Пошто се селекција врши из више табела,
селекција свих поља преко * неће
функционисати. Следећи упит ће изабрати
поља само из главне табеле, али не и из
повезане:
SELECT *
Да би се подаци бирали из свих
табела, потребно је пре * навести име
табеле за селекцију:
SELECT users.*, cities.*
Или се могу навести поља која су нам потребна са навођењем имена табеле испред њих:
SELECT users.name, cities.name
Ова два начина имају проблем. Ствар је у томе што ако поља у табелама имају иста имена, у низу Пајтон ће доћи до конфликта имена и победиће само једно поље, а друго неће бити присутно.
За решавање проблема потребно је конфликтна
имена преименовати преко команде
as:
SELECT users.name, cities.name as city_name
Веза
После команде ON морамо навести
поља из две табеле, по којима се остварује
веза. У нашем случају то ће бити поље id
из табеле са градовима и поље city_id
из табеле са корисницима:
ON cities.id=users.city_id
Упит
На крају, упит који ће преузети кориснике заједно са њиховим градовима ће изгледати овако:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Практични задаци
Претпоставимо да имате табелу са производима и табелу са њиховим категоријама. Напишите упит, који ће преузети називе производа заједно са њиховим категоријама.