Добивање на податоци од поврзани табели во Python

Ајде да направиме барање што ќе ги земе сите корисници заедно со нивните градови. За ова ќе биде потребна командата LEFT JOIN:

Нејзиниот синтаксис изгледа на следниов начин:

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

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

Полиња

Бидејќи селекцијата се врши од неколку табели, селекцијата на сите полиња преку * нема да работи. Следното барање ќе ги избере полињата само од главната табела, но не и од поврзаната:

sqlSELECT *

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

sqlSELECT users.*, cities.*

Или може да се наведат потребните ни полиња со наведување на името на табелата пред нив:

sqlSELECT users.name, cities.name

Овие два начина имаат проблем. Работи во тоа што ако полињата во табелите имаат исти имиња, тогаш во Python листата ќе дојде до конфликт на имиња и ќе победи само едно поле, а второто нема да постои.

За решавање на проблемот потребно е конфликтните имиња да се преименуваат преку командата 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

Нека имате табела со производи и табела со нивните категории. Напишете барање, кое ќе ги земе имињата на производите заедно со нивните категории.