Python'da İlişkili Tablolardan Veri Alma
Tüm kullanıcıları şehirleriyle birlikte
getiren bir sorgu yapalım. Bunun için
LEFT
JOIN komutuna ihtiyacımız olacak:
Sözdizimi aşağıdaki gibidir:
SELECT alanlar FROM tablo_adi
LEFT JOIN ilişkili_tablo_adi ON bağlantı_koşulu
WHERE seçim_koşulu
Şimdi bu komutun sözdiziminin ayrı ayrı parçalarını inceleyelim.
Alanlar
Seçim birden fazla tablodan yapıldığı için,
* kullanarak tüm alanları seçmek
çalışmayacaktır. Aşağıdaki sorgu sadece ana
tablodan alanları seçer, ilişkili tablodan
seçmez:
SELECT *
Verilerin tüm tablolardan seçilmesi için,
* ifadesinden önce tablo adını
belirtmeliyiz:
SELECT users.*, cities.*
Ya da ihtiyacımız olan alanları, önlerine tablo adlarını yazarak listeleyebiliriz:
SELECT users.name, cities.name
Bu iki yöntemin bir sorunu vardır. Eğer tablolardaki alanlar aynı isme sahipse, Python dizisinde isim çakışması olacak ve sadece bir alan kalacak, diğeri olmayacaktır.
Bu sorunu çözmek için, çakışan isimleri
as komutuyla yeniden adlandırmalıyız:
SELECT users.name, cities.name as city_name
Bağlantı
ON komutundan sonra, bağlantının
kurulduğu iki tablodaki alanları
belirtmeliyiz. Bizim durumumuzda bu, şehirler
tablosundaki id alanı ve kullanıcılar
tablosundaki city_id alanı olacaktır:
ON cities.id=users.city_id
Sorgu
Sonuçta, kullanıcıları şehirleriyle birlikte getiren sorgu aşağıdaki gibi olacaktır:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Pratik Görevler
Elinizde ürünler ve onların kategorileri için tablolar olduğunu varsayalım. Ürün adlarını kategorileriyle birlikte getiren bir sorgu yazın.