Дар Python аз ҷадвалҳои пайвастшуда маълумот гирифтан

Биёед дархостеро созем, ки ҳамаи корбаронро бо шаҳрҳои онҳо мегирад. Барои ин фармони LEFT JOIN лозим аст:

Синтаксиси он ба ин шакл аст:

sqlSELECT майдонҳо FROM номи_ҷадвал
  LEFT JOIN номи_ҷадвали_пайвастшуда ON шарти_пайваст
WHERE шарти_интихоб

Биёед қисмҳои алоҳидаи синтаксиси ин фармонро таҳлил кунем.

Майдонҳо

Азбаски интихоб аз чанд ҷадвал сурат мегирад, интихоби ҳамаи майдонҳо тавассути * кор нахоҳад кард. Дархости зерин майдонҳоро танҳо аз ҷадвали асосӣ интихоб мекунад, на аз ҷадвали пайвастшуда:

sqlSELECT *

Барои он ки маълумот аз ҳама ҷадвалҳо гирифта шавад, пеш аз * бояд номи ҷадвалеро барои интихоб нишон диҳем:

sqlSELECT users.*, cities.*

Ё шумо метавонед майдонҳои заруриро бо нишон додани номи ҷадвал пеш аз онҳо рӯйхат кунед:

sqlSELECT users.name, cities.name

Ин ду равиш мушкилие доранд. Масъала ин аст, ки агар майдонҳо дар ҷадвалҳо номҳои якхела дошта бошанд, дар массиви Python муборизаи номҳо рух дода ва танҳо як майдон ғолиб омада, майдони дуюм вуҷуд нахоҳад дошт.

Барои ҳалли мушкил, бояд номҳои муборизашударо тавассути фармони as тағир диҳем:

sqlSELECT users.name, cities.name as city_name

Пайвастшавӣ

Пас аз фармони ON мо бояд майдонҳоро аз ду ҷадвал нишон диҳем, ки пайвастшавӣ бар асоси онҳо амалӣ мешавад. Дар ҳолати мо, ин майдони id аз ҷадвали шаҳрҳо ва майдони city_id аз ҷадвали корбарон хоҳад буд:

sqlON cities.id=users.city_id

Дархост

Дар ниҳоят, дархости ҳосилкунандаи корбарон бо шаҳрҳои онҳо ба ин шакл хоҳад буд:

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

Масъалаҳои амалӣ

Задание 1

Фарз мекунем, ки шумо ҷадвали маҳсулот ва ҷадвали категорияҳои онҳоро доред. Дархостеро нависед, ки номҳои маҳсулотро бо категорияҳои онҳо мегирад.