Python-da Əlaqəli Cədvəllərdən Məlumatların Alınması

Gəlin istifadəçiləri onların şəhərləri ilə birlikdə çıxaran bir sorğu edək. Bunun üçün LEFT JOIN əmri tələb olunacaq:

Onun sintaksisi aşağıdakı kimi görünür:

sqlSELECT sahələr FROM cədvəl_adı
  LEFT JOIN əlaqəli_cədvəl_adı ON əlaqə_şərti
WHERE seçim_şərti

Gəlin bu əmrın sintaksisinin ayrı-ayrı hissələrini izah edək.

Sahələr

Bir neçə cədvəldən seçim edildiyi üçün, * vasitəsilə bütün sahələrin seçilməsi işləməyəcək. Aşağıdakı sorğu yalnız əsas cədvəldən sahələri seçəcək, əlaqəli cədvəldən yox:

sqlSELECT *

Bütün cədvəllərdən məlumatların seçilməsi üçün, * qarşısında seçim üçün cədvəl adını göstərmək lazımdır:

sqlSELECT users.*, cities.*

Ya da bizə lazım olan sahələri onların qarşısında cədvəl adını göstərməklə sadalamaq olar:

sqlSELECT users.name, cities.name

Bu iki üsulun problemi var. Məsələ burasındadır ki, əgər cədvəllərdəki sahələr eyni adlara malikdirsə, onda Python massivində adlar toqquşması baş verəcək və yalnız bir sahə qalacaq, ikincisi olmayacaq.

Problemi həll etmək üçün, toqquşan adları as əmri vasitəsilə dəyişdirmək lazımdır:

sqlSELECT users.name, cities.name as city_name

Əlaqə

ON əmrından sonra biz iki cədvəl arasında əlaqənin qurulduğu sahələri göstərməliyik. Bizim vəziyyətimizdə bu, şəhərlər cədvəlindəki id sahəsi və istifadəçilər cədvəlindəki city_id sahəsi olacaq:

sqlON cities.id=users.city_id

Sorğu

Nəticədə, istifadəçiləri onların şəhərləri ilə birlikdə çıxaran sorğu aşağıdakı kimi görünəcək:

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

Praktik Tapşırıqlar

Задание 1

Tutaq ki, sizin məhsullar cədvəli və onların kateqoriyaları cədvəli var. Məhsulların adlarını onların kateqoriyaları ilə birlikdə çıxaran bir sorğu yazın.