Python-да боғланган jадваллардан маълумот олиш
Ҳамма фойдаланувчиларни шахарлари билан бирга оладиган
сўров ясайлик. Бунинг учун LEFT
JOIN буйруғи зарур бўлади:
Унинг синтаксиси quyidagicha кўринишади:
SELECT майдонлар FROM jадвал_номи
LEFT JOIN боғланган_jадвал_номи ON боғланиш_шарти
WHERE танлов_шарти
Келинг, бу буйруқнинг синтаксис қисмларини алоҳида кўриб чиқайлик.
Майдонлар
Неча jадвалдан маълумот олингани сабабли,
* орқали барча майдонларни олиш
ишламayди. Quyidagi сўров асосий jадвалнинг
майдонларинигина олади, лекин боғланган jадвалникини
эмас:
SELECT *
Ҳамма jадваллардан маълумот олиш учун,
* олдида маълумот олинадиган
jадвал номини кўрсатиш керак:
SELECT users.*, cities.*
Ёки керакли майдонларни уларнинг олдида jадвал номи билан кўрсатиб кетиш мумкин:
SELECT users.name, cities.name
Бу икки усулнинг muammosi бор. Гap шундайки, aгар jадваллардаги майдонларнинг номлари бир хил бўлса, Python-нинг массивида номлар зиддиятгиga duch келиб, фақат битта майдонгина қолади, иккинчиси бўлмайди.
Бу muammoni ҳал қилиш учун зид келувчи
номларни as буйруғи орқали
ўзгартириш керак:
SELECT users.name, cities.name as city_name
Боғланиш
ON буйруғидан кейин биз икки jадвал
ўртасидаги боғланиш амалга ошириладиган
майдонларни кўрсатишимиз керак. Бизнинг ҳолимизда
бу шахарлар jадвалининг id майдони
ва фойдаланувчилар jадвалининг city_id
майдони бўлади:
ON cities.id=users.city_id
Сўров
Натижада, фойдаланувчиларни уларнинг шахарлари билан бирга олувчи сўров quyidagicha кўринишади:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Амалий вазифалар
Сизда товарлар jадвали ва уларнинг туркумлари jадвали бор деб фараз қилайлик. Товарлар номини уларнинг туркумлари билан бирга оладиган сўров язинг.