Տվյալների ստացում կապված աղյուսակներից Python-ում

Եկեք կատարենք հարցում, որը կբերի բոլոր օգտատերերին իրենց քաղաքների հետ միասին: Դրա համար անհրաժեշտ կլինի LEFT JOIN հրամանը:

Դրա շարահյուսությունը հետևյալն է.

sqlSELECT դաշտեր FROM աղյուսակի_անունը
  LEFT JOIN կապված_աղյուսակի_անունը ON կապի_պայմանը
WHERE ընտրության_պայմանը

Եկեք վերլուծենք այս հրամանի շարահյուսության առանձին մասերը:

Դաշտեր

Քանի որ ընտրությունը կատարվում է մի քանի աղյուսակներից, ապա բոլոր դաշտերի ընտրությունը *-ի միջոցով չի աշխատի: Հետևյալ հարցումը կընտրի դաշտերը միայն հիմնական աղյուսակից, բայց ոչ կապված աղյուսակից:

sqlSELECT *

Որպեսզի տվյալները ընտրվեն բոլոր աղյուսակներից, անհրաժեշտ է *-ից առաջ նշել աղյուսակի անունը ընտրության համար:

sqlSELECT users.*, cities.*

Կամ կարելի է թվարկել մեզ անհրաժեշտ դաշտերը՝ դրանց դիմաց նշելով աղյուսակի անունը:

sqlSELECT users.name, cities.name

Այս երկու եղանակներն ունեն խնդիր: Բանը նրանում է, որ եթե աղյուսակների դաշտերն ունեն նույն անունները, ապա Python-ի զանգվածում տեղի կունենա անունների կոնֆլիկտ և հաղթելու է միայն mեկ դաշտ, իսկ երկրորդը չի լինի:

Խնդիրը լուծելու համար անհրաժեշտ է կոնֆլիկտային անունները վերանվանել 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

Ենթադրենք ունեք ապրանքների աղյուսակ և դրանց կատեգորիաների աղյուսակ: Գրեք հարցում, որը կբերի ապրանքների անունները նրանց կատեգորիաների հետ միասին: