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:

sqlSELECT 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:

sqlSELECT *

Verilerin tüm tablolardan seçilmesi için, * ifadesinden önce tablo adını belirtmeliyiz:

sqlSELECT users.*, cities.*

Ya da ihtiyacımız olan alanları, önlerine tablo adlarını yazarak listeleyebiliriz:

sqlSELECT 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:

sqlSELECT 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:

sqlON cities.id=users.city_id

Sorgu

Sonuçta, kullanıcıları şehirleriyle birlikte getiren sorgu aşağıdaki gibi olacaktır:

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

Pratik Görevler

Задание 1

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.