Python-да боғланган jадваллардан маълумот олиш

Ҳамма фойдаланувчиларни шахарлари билан бирга оладиган сўров ясайлик. Бунинг учун LEFT JOIN буйруғи зарур бўлади:

Унинг синтаксиси quyidagicha кўринишади:

sqlSELECT майдонлар FROM jадвал_номи
  LEFT JOIN боғланган_jадвал_номи ON боғланиш_шарти
WHERE танлов_шарти

Келинг, бу буйруқнинг синтаксис қисмларини алоҳида кўриб чиқайлик.

Майдонлар

Неча jадвалдан маълумот олингани сабабли, * орқали барча майдонларни олиш ишламayди. Quyidagi сўров асосий jадвалнинг майдонларинигина олади, лекин боғланган jадвалникини эмас:

sqlSELECT *

Ҳамма jадваллардан маълумот олиш учун, * олдида маълумот олинадиган jадвал номини кўрсатиш керак:

sqlSELECT users.*, cities.*

Ёки керакли майдонларни уларнинг олдида jадвал номи билан кўрсатиб кетиш мумкин:

sqlSELECT users.name, cities.name

Бу икки усулнинг muammosi бор. Гap шундайки, aгар jадваллардаги майдонларнинг номлари бир хил бўлса, Python-нинг массивида номлар зиддиятгиga duch келиб, фақат битта майдонгина қолади, иккинчиси бўлмайди.

Бу muammoni ҳал қилиш учун зид келувчи номларни as буйруғи орқали ўзгартириш керак:

sqlSELECT users.name, cities.name as city_name

Боғланиш

ON буйруғидан кейин биз икки jадвал ўртасидаги боғланиш амалга ошириладиган майдонларни кўрсатишимиз керак. Бизнинг ҳолимизда бу шахарлар jадвалининг id майдони ва фойдаланувчилар jадвалининг city_id майдони бўлади:

sqlON cities.id=users.city_id

Сўров

Натижада, фойдаланувчиларни уларнинг шахарлари билан бирга олувчи сўров quyidagicha кўринишади:

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

Амалий вазифалар

Задание 1

Сизда товарлар jадвали ва уларнинг туркумлари jадвали бор деб фараз қилайлик. Товарлар номини уларнинг туркумлари билан бирга оладиган сўров язинг.