Добивање на податоци од поврзани табели во Python
Ајде да направиме барање што ќе ги земе
сите корисници заедно со нивните градови. За ова
ќе биде потребна командата LEFT
JOIN:
Нејзиниот синтаксис изгледа на следниов начин:
SELECT полиња FROM име_на_табела
LEFT JOIN име_на_поврзана_табела ON услов_за_поврзување
WHERE услов_за_селекција
Ајде да ги разгледаме поединечните делови од синтаксисот на оваа команда.
Полиња
Бидејќи селекцијата се врши од неколку табели,
селекцијата на сите полиња преку * нема
да работи. Следното барање ќе ги избере
полињата само од главната табела, но не и од
поврзаната:
SELECT *
За да се изберат податоците од сите
табели, потребно е пред * да се наведе името
на табелата за селекција:
SELECT users.*, cities.*
Или може да се наведат потребните ни полиња со наведување на името на табелата пред нив:
SELECT users.name, cities.name
Овие два начина имаат проблем. Работи во тоа што ако полињата во табелите имаат исти имиња, тогаш во Python листата ќе дојде до конфликт на имиња и ќе победи само едно поле, а второто нема да постои.
За решавање на проблемот потребно е конфликтните
имиња да се преименуваат преку командата
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
Практични задачи
Нека имате табела со производи и табела со нивните категории. Напишете барање, кое ќе ги земе имињата на производите заедно со нивните категории.