Python'da Bog‘langan Jadvalardan Ma'lumotlarni Olish

Keling, barcha foydalanuvchilarni ularning shaharlari bilan birga oladigan so‘rov yarataylik. Buning uchun LEFT JOIN buyrug‘i kerak bo‘ladi:

Uning sintaksisi quyidagicha:

sqlSELECT maydonlar FROM jadval_nomi
  LEFT JOIN bog‘langan_jadval_nomi ON bog‘lanish_sharti
WHERE tanlash_sharti

Keling, ushbu buyruq sintaksisining alohida qismlarini ko‘rib chiqaylik.

Maydonlar

Tanlash bir nechta jadvallardan amalga oshirilgani uchun, * orqali barcha maydonlarni tanlash ishlamaydi. Quyidagi so‘rov faqat asosiy jadvaldan maydonlarni tanlaydi, bog‘langan jadvaldan emas:

sqlSELECT *

Ma'lumotlar barcha jadvallardan olinishi uchun, * dan oldin jadval nomini ko‘rsatish kerak:

sqlSELECT users.*, cities.*

Yoki kerakli maydonlarni ularning oldida jadval nomi bilan ko‘rsatib ro‘yxatini keltirish mumkin:

sqlSELECT users.name, cities.name

Ushbu ikki usul muammoga ega. Gap shundaki, agar jadvallardagi maydonlar bir xil nomga ega bo‘lsa, Python massivida nomenklatura to‘qnashuvi yuzaga keladi va faqat bitta maydon qoladi, ikkinchisi bo‘lmaydi.

Muammoni hal qilish uchun to‘qnashuvchi nomlarni as buyrug‘i orqali o‘zgartirish kerak:

sqlSELECT users.name, cities.name as city_name

Bog‘lanish

ON buyrug‘idan keyin biz bog‘lanish amalga oshiriladigan ikki jadvaldagi maydonlarni ko‘rsatishimiz kerak. Bizning holatda bu shaharlar jadvalidagi id maydoni va foydalanuvchilar jadvalidagi city_id maydoni bo‘ladi:

sqlON cities.id=users.city_id

So‘rov

Natijada, foydalanuvchilarni ularning shaharlari bilan birga oladigan so‘rov quyidagicha ko‘rinadi:

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

Amaliy Mashqlar

Задание 1

Faraz qilaylik, sizda mahsulotlar jadvali va ularning toifalari jadvali mavjud. Mahsulot nomlarini ularning toifalari bilan birga oladigan so‘rov yozing.