Python တွင် ဒေတာဆိုင်ရာ ဆက်နွယ်မှုများ

ကျွန်ုပ်တို့ရှေ့တွင် ဖခင်များနှင့် သားများကို သိမ်းဆည်းရန် တာဝန်ရှိသည်ဆိုပါစို့။ ဖခင်တစ်ဦးစီတွင် သားတစ်ယောက်သာ ရှိနိုင်ပြီး၊ သားသည်လည်း ၎င်း၏ကိုယ်ပိုင်သားတစ်ယောက် ရှိနိုင်သည်။

ဒေတာများကို မည်သို့သိမ်းဆည်းမည်ကို စဉ်းစားရန် လိုအပ်သည်။ ပထမဆုံး စိတ်ကူးမှာ ဇယားနှစ်ခု ပြုလုပ်ရန် ဖြစ်နိုင်သည် - ဖခင်များအတွက် parents ဇယားနှင့် သားများအတွက် sons ဇယား။ ထို့နောက် ဤဇယားများကို အကွက်တစ်ခုခုဖြင့် ချိတ်ဆက်ရန်- son_id သို့မဟုတ် parent_id။

သို့သော်၊ ဤစိတ်ကူးသည် အလွန်ကောင်းမွန်သော စိတ်ကူးမဟုတ်ပါ - အဘယ်ကြောင့်ဆိုသော် လူတစ်ဦးတည်းသည် တစ်ချိန်တည်းမှာပင် ဖခင်လည်းဖြစ်နိုင်သလို သားလည်းဖြစ်နိုင်သည် - ထို့ကြောင့် ၎င်းကို ဇယားနှစ်ခုစလုံးတွင် သိမ်းဆည်းရန် လိုအပ်မည်၊ ထိုသို့ပြုလုပ်ခြင်းသည် မအီမသာဖြစ်စေပြီး နေရာပိုလိုအပ်စေကာ အမှားများ ဖြစ်ပွားစေရန် လွယ်ကူသည်။

ပိုမိုကောင်းမွန်သောရွေးချယ်မှုမှာ ဇယားကို ၎င်း၏ကိုယ်ပိုင်နှင့် ချိတ်ဆက်ရန်ဖြစ်သည်- users ဇယားတစ်ခု ပြုလုပ်ကြပါစို့။ ၎င်းအတွင်း၌ သက်ဆိုင်ရာယူဆာအားလုံးကို သိမ်းဆည်းပြီး တစ်ဦးစီအတွက် son_id အကွက်ပြုလုပ်မည်၊ ထိုအကွက်အတွင်း၌ ထိုဇယားမှပင် id သားကို သိမ်းဆည်းမည်-

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

မေးမြန်းချက်များ

ယခု ၎င်း၏သားနှင့်အတူ ယူဆာကို ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးကြပါစို့။

အစပိုင်းတွင် ယူဆာများကို ထုတ်ယူကြည့်ရအောင်-

sqlSELECT
  *
FROM
  users

ယခု ယူဆာများနှင့် ၎င်းတို့၏သားများကို ပေါင်းစည်းကြမည်။ ကျွန်ုပ်တို့သည် ဇယားကို ၎င်း၏ကိုယ်ပိုင်နှင့် ပေါင်းစည်းမည်ဖြစ်သောကြောင့် ၎င်း၏အမည်ပြောင်းလဲမှုကို လုပ်ဆောင်ရန် လိုအပ်သည်-

sqlLEFT JOIN users as sons

ယခု ကျွန်ုပ်တို့သည် အခြေခံဇယားနှင့် အမည်ပြောင်းထားသောဇယားတို့၏ ဆက်သွယ်မှုကို သတ်မှတ်နိုင်သည်-

sqlLEFT JOIN users as sons ON sons.id=users.son_id

ယခု အကွက်များကို သတ်မှတ်ကြမည်-

sqlSELECT
  users.name as user_name, sons.name as son_name

အားလုံးကို စုစည်းပြီး အောက်ပါ မေးမြန်းချက်ကို ရယူကြမည်-

sqlSELECT
  users.name as user_name, sons.name as son_name
FROM
  users
LEFT JOIN users as sons ON sons.id=users.son_id

လက်တွေ့လေ့ကျင့်ခန်းများ

Задание 1

ကျွန်ုပ်တို့တွင် ကဏ္ဍများ ရှိသည်ဆိုပါစို့။ ကဏ္ဍတစ်ခုစီသည် မိဘကဏ္ဍတစ်ခုခုနှင့် သက်ဆိုင်နိုင်ပြီး၊ ထိုကဏ္ဍသည်လည်း ၎င်း၏ကိုယ်ပိုင်မိဘကဏ္ဍနှင့် သက်ဆိုင်နိုင်ပြီး ထိုသို့ဆက်လက်ဖြစ်ပွားနိုင်သည်။ သိုလှောင်မှုဖွဲ့စည်းပုံကို ရေးဆွဲပါ။

Задание 2

ကဏ္ဍတစ်ခုကို ၎င်း၏မိဘကဏ္ဍနှင့်အတူ ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးပါ။

Задание 3

ကဏ္ဍတစ်ခုကို ၎င်း၏မိဘနှင့် ဘိုးဘေးတို့နှင့်အတူ ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးပါ။

Задание 4

ကဏ္ဍတစ်ခုကို ၎င်း၏မိဘ၊ ဘိုးဘေးနှင့် ဘိုးဘေးတို့၏ဘိုးဘေးတို့နှင့်အတူ ထုတ်ယူပေးမည့် မေးမြန်းချက်တစ်ခုကို ရေးပါ။