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:
SELECT 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:
SELECT *
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:
SELECT 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:
SELECT 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:
SELECT 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:
ON 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:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktik Tapşırıqlar
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.