Տվյալների ստացում կապված աղյուսակներից Python-ում
Եկեք կատարենք հարցում, որը կբերի
բոլոր օգտատերերին իրենց քաղաքների հետ միասին: Դրա համար
անհրաժեշտ կլինի LEFT
JOIN հրամանը:
Դրա շարահյուսությունը հետևյալն է.
SELECT դաշտեր FROM աղյուսակի_անունը
LEFT JOIN կապված_աղյուսակի_անունը ON կապի_պայմանը
WHERE ընտրության_պայմանը
Եկեք վերլուծենք այս հրամանի շարահյուսության առանձին մասերը:
Դաշտեր
Քանի որ ընտրությունը կատարվում է մի քանի աղյուսակներից,
ապա բոլոր դաշտերի ընտրությունը *-ի միջոցով
չի աշխատի: Հետևյալ հարցումը կընտրի
դաշտերը միայն հիմնական աղյուսակից, բայց ոչ
կապված աղյուսակից:
SELECT *
Որպեսզի տվյալները ընտրվեն բոլոր
աղյուսակներից, անհրաժեշտ է *-ից առաջ նշել աղյուսակի
անունը ընտրության համար:
SELECT users.*, cities.*
Կամ կարելի է թվարկել մեզ անհրաժեշտ դաշտերը՝ դրանց դիմաց նշելով աղյուսակի անունը:
SELECT users.name, cities.name
Այս երկու եղանակներն ունեն խնդիր: Բանը նրանում է, որ եթե աղյուսակների դաշտերն ունեն նույն անունները, ապա Python-ի զանգվածում տեղի կունենա անունների կոնֆլիկտ և հաղթելու է միայն mեկ դաշտ, իսկ երկրորդը չի լինի:
Խնդիրը լուծելու համար անհրաժեշտ է կոնֆլիկտային
անունները վերանվանել as հրամանի միջոցով:
SELECT users.name, cities.name as city_name
Կապ
ON հրամանից հետո մենք պետք է նշենք
երկու աղյուսակների այն դաշտերը, որոնց միջոցով իրականացվում է
կապը: Մեր դեպքում դա կլինի id
դաշտը քաղաքների աղյուսակից և city_id
դաշտը օգտատերերի աղյուսակից:
ON cities.id=users.city_id
Հարցում
Ի վերջո, հարցումը, որը կբերի օգտատերերին նրանց քաղաքների հետ միասին կունենա հետևյալ տեսքը:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Գործնական առաջադրանքներ
Ենթադրենք ունեք ապրանքների աղյուսակ և դրանց կատեգորիաների աղյուսակ: Գրեք հարցում, որը կբերի ապրանքների անունները նրանց կատեգորիաների հետ միասին: