ကွန်ပျူတာများ, ပရိုဂရမ်းမင်း
ဥပမာတစ်ခု, အသေးစိတ်ဖော်ပြချက်, ထိုအမှား၏အသုံးပြုမှုကို - လက်ဝဲဘက် (SQL) join
မည်သည့်စစ်မှန်သော relational database ထဲတွင်, ရှိသမျှသတင်းအချက်အလက်များကိုသီးခြားစားပွဲပေါ်ဖြန့်ဝေသည်။ ကျောက်ပြားများအတော်များများအချင်းချင်းအတူဆက်သွယ်ရေးအစီအစဉ်အတွက်ထွက်မသတ်မှတ်နေကြသည်။ သို့သျောလညျး၏အကူအညီဖြင့် SQL query လုပ်တဲ့အခါ ကတိုက်နယ်အတွင်းရှိ embedded မဒေတာများအကြား link တစ်ခု, ထားရန်အတော်လေးဖြစ်နိုင်ပါတယ်။ ဒါဟာသင်ထင်ရသောလူထုကိုသတင်းအချက်အလက်ကျောက်ပြားကိုမဆိုအရေအတွက်ကများအကြားဆက်ဆံရေးကိုတည်ဆောက်ရန်နှင့်ပင်ချိတ်ဆက်ဖို့ခွင့်ပြုထားတဲ့ပူးပေါင်းဆက်သွယ်မှု, ဖျော်ဖြေခြင်းဖြင့်ပြုသောအမှုဖြစ်ပါတယ်။
ဤဆောင်းပါးသည် join လက်ဝဲပြင်အကြောင်းကိုအထူးစကားပြောပါလိမ့်မယ်။ ကွန်နက်ရှင်၏ဤအမျိုးအစားများ၏ဖော်ပြချက်မှဆက်လက်မလုပ်ဆောင်ခင်အချို့သောဒေတာဘေ့စစားပွဲများတွင်ထည့်ပါ။
လိုအပ်သောစားပွဲပြင်ဆင်နေ
ဥပမာအားဖြင့်, ကျွန်တော်တို့ရဲ့ဒေတာဘေ့စရှိလူများနှင့်မိမိတို့၏အိမ်ခြံမြေအကြောင်းသတင်းအချက်အလက်လည်းမရှိ။ ပြည်သူ့ (လူတွေ), Realty (အိမ်ခြံမြေ), Realty_peoples (စားပွဲဆက်ဆံရေးကို, အဘယျသို့ပိုင်ဆိုင်မှုမှပိုင်ဆိုင်သောလူ): သုံးယောက်စားပွဲပေါ်တွင်အခြေခံအကျဉ်းချုပ်။ လူအများ၏စားပွဲထဲမှာသိမ်းထားတဲ့အောက်ပါဒေတာယူဆ:
လူမျိုး | ||||
အိုင်ဒီ | L_name | F_name | Middle_name | မှေးနေ့ |
1 | Ivanova | Daria | ခ | 07/16/2000 |
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 |
3 | Evgenin | အလက်ဇန်းဒါး | Federovich | 04/30/1964 |
4 | Annina | ချစ်ခြင်းမေတ္တာ | P. | 31.12.1989 |
5 | Gerasimovsky | မျှော်လင့်ချက် | P. | 14.03.1992 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 |
8 | Sukhanovskaya | ဂျူလီယာ | Y. | 01.10.2001 |
အိမ်ခြံမြေ:
Realty | |
အိုင်ဒီ | လိပ်စာ |
1 | Arkhangelsk, ul ။ Voronin, ဃ။ 7, kv.6 |
2 | Arkhangelsk, ul ။ Severodvinskaya, ဃ။ 84, q ။ 9 BR ။ 5 |
3 | Arkhangelsk ဒေသ, Severodvinsk, St ။ လီနင်, ဃ။ 134, က q ။ 85 |
4 | Arkhangelsk ဒေသ, Novodvinsk, ul ။ Proletarshaya, ဃ။ 16, q ။ 137 |
5 | Arkhangelsk, pl ။ Terekhina, ဃ။ 89, q ။ 13 |
ဆက်ဆံရေးကလူ - အိမ်ခြံမြေ:
Realty_peoples | ||
id_peoples | id_realty | ပုံစံ |
7 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
8 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
3 | 5 | အိမ်ခြံမြေ |
7 | 1 | အိမ်ခြံမြေ |
5 | 4 | ဘုံအစိတ်အပိုင်းများ |
6 | 4 | ဘုံအစိတ်အပိုင်းများ |
လက်ဝဲဘက် (SQL) join - ဖျေါပွခကျြ
Left ဒြပ်ပေါင်းများကိုအောက်ပါ syntax ရှိပါတယ်:
| Table_A LEFT table_B [{predicate ON} JOIN ] {tolbtsov နှင့်အတူ spisok_ အသုံးပြုခြင်း} |
အောက်ပါအတိုင်းသိထားအဖြစ်:
နှင့်ဤစကားရပ် predicate သာတူညီသည့်အတန်းဖော်ပြရန်စားပွဲတင် A နှင့်စားပွဲတင် B က၏လိုင်း, ချွင်းချက်မပါဘဲ, အားလုံးကို Select လုပ်ပါ "အဖြစ်ဘာသာပြန်ထားသောဖြစ်ပါတယ်။ တန်ဖိုးများ "- စားပွဲအားလုံးတစ်ဦးများအတွက် string ကို table ထဲမှာရှာတွေ့ခဲ့သည်လျှင်, Null ရလဒ်ကော်လံဖြည့်ပါ။
အများစုကတော့အခါလက်ဝဲကွန်နက်ရှင်က connection စေရန်စီစဉ်ထားသောကော်လံအမည်များ, တူညီတဲ့များမှာတဲ့အခါမှသာအသုံးပြုသည်အသုံးပြုခြင်း, ON ညွှန်ပြနေသည်။
လက်ဝဲ join - အသုံးပြုမှုဥပမာ
လက်ဝဲ၏ဆက်သွယ်မှုအားဖြင့်ငါတို့သည်လျှင်ရှိပြည်သူ့ပစ္စည်းဥစ္စာပိုင်ဆိုင်မှု, စာရင်းထဲကလူအပေါငျးတို့တွေ့နိုင်ပါသည်။ လက်ဝဲအတွက်ဒီလိုလုပ်ဖို့ SQL query ကိုဥပမာ join:
ပြည်သူ့ SELECT ။ *, Realty_peoples.id_realty, Realty_peoples.type ပြည်သူ့လက်ဝဲမှ Realty_peoples ON Peoples.id = Realty_peoples.id_peoples JOIN; |
အောက်ပါရလဒ်များကိုနှင့်အတူ:
Query1 | ||||||
အိုင်ဒီ | L_name | F_name | Middle_name | မှေးနေ့ | id_realty | ပုံစံ |
1 | Ivanova | Daria | ခ | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 | ||
3 | Evgenin | အလက်ဇန်းဒါး | Federovich | 04/30/1964 | 5 | အိမ်ခြံမြေ |
4 | Annina | ချစ်ခြင်းမေတ္တာ | P. | 31.12.1989 | ||
5 | Gerasimovsky | မျှော်လင့်ချက် | P. | 14.03.1992 | 4 | ဘုံအစိတ်အပိုင်းများ |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | ဘုံအစိတ်အပိုင်းများ |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 1 | အိမ်ခြံမြေ |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
8 | Sukhanovskaya | ဂျူလီယာ | Y. | 01.10.2001 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
ကျွန်တော်မြင်သည်အတိုင်း, Ivanova Darya Pugin Vladislav နှင့် Anninoy Lyubovi အဘယ်သူမျှမအိမ်ခြံမြေအခွင့်အရေးများမှတ်ပုံတင်။
ငါတို့သည်အတွင်းအတွင်းပိုင်း join join သုံးပြီးဘယ်အရာကိုခံရကြပြီမလဲ သင်သိကြောင့် Non-တိုက်ဆိုင်သည့်အတန်းချန်လှပ်ဒါကြောင့်ကျွန်တော်တို့ရဲ့နောက်ဆုံးနမူနာထဲကသုံးရိုးရှင်းစွာကျဆင်းသွားလိမ့်မည်ဟု:
Query1 | ||||||
အိုင်ဒီ | L_name | F_name | Middle_name | မှေးနေ့ | id_realty | ပုံစံ |
3 | Evgenin | အလက်ဇန်းဒါး | Federovich | 04/30/1964 | 5 | အိမ်ခြံမြေ |
5 | Gerasimovsky | မျှော်လင့်ချက် | P. | 14.03.1992 | 4 | ဘုံအစိတ်အပိုင်းများ |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | ဘုံအစိတ်အပိုင်းများ |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 1 | အိမ်ခြံမြေ |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
8 | Sukhanovskaya | ဂျူလီယာ | Y. | 01.10.2001 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
ဒါဟာဒုတိယဗားရှင်းလည်းကျွန်တော်တို့ရဲ့ပြဿနာများ၏အခြေအနေများနှင့်ကိုက်ညီကြောင်းထင်ရပေသည်။ ကျွန်တော်အခြားအပေါ်ပူးတွဲစတင်များနှင့်အခြားစားပွဲလျှင်မည်သို့ပင်ဆို, ရလဒ်ကနေလူသုံးယောက်ပြီးသား irretrievably သွားပြီ။ ထို့ကြောင့်, အလေ့အကျင့်အတွက်မျိုးစုံစားပွဲပေါင်းစပ်ပြီးတဲ့အခါမှာပိုပြီးမကြာခဏလက်ဝဲများနှင့်အတွင်းပိုင်း join ထက်ညာဘက် connection ကိုအသုံးပြုခဲ့သည်။
SQL ဥပမာ join ဘယ်ဘက်ကိုကြည့်ဖို့ဆက်လက်ပါလိမ့်မယ်။ ကျွန်တော်တို့ရဲ့အိမ်လိပ်စာများနှင့်အတူစားပွဲတစ်ခု Attach:
ပြည်သူ့ SELECT ။ *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address လူများထံမှ LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT Realty.id = Realty_peoples.id_realty ON Realty JOIN |
ယခုငါတို့ပညတ်တရား၏တစ်ဦးကြင်ကြင်နာနာ, ဒါပေမယ့်လည်းအိမ်ခြံမြေများ၏လိပ်စာမသာ get:
Query1 | |||||||
အိုင်ဒီ | L_name | F_name | Middle_name | မှေးနေ့ | id_realty | ပုံစံ | လိပ်စာ |
1 | Ivanova | Daria | ခ | 07/16/2000 | |||
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 | |||
3 | Evgenin | အလက်ဇန်းဒါး | Federovich | 04/30/1964 | 5 | အိမ်ခြံမြေ | Arkhangelsk, pl ။ Terekhina, ဃ။ 89, q ။ 13 |
4 | Annina | ချစ်ခြင်းမေတ္တာ | P. | 31.12.1989 | |||
5 | Gerasimovsky | မျှော်လင့်ချက် | P. | 14.03.1992 | 4 | ဘုံအစိတ်အပိုင်းများ | Arkhangelsk ဒေသ, Novodvinsk, ul ။ Proletarshaya, ဃ။ 16, q ။ 137 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | ဘုံအစိတ်အပိုင်းများ | Arkhangelsk ဒေသ, Novodvinsk, ul ။ Proletarshaya, ဃ။ 16, q ။ 137 |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု | Arkhangelsk ဒေသ, Severodvinsk, St ။ လီနင်, ဃ။ 134, က q ။ 85 |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 1 | အိမ်ခြံမြေ | Arkhangelsk, ul ။ Voronin, ဃ။ 7, kv.6 |
8 | Sukhanovskaya | ဂျူလီယာ | Y. | 01.10.2001 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
Arkhangelsk ဒေသ, Severodvinsk, St ။ လီနင်, ဃ။ 134, က q ။ 85 |
လက်ဝဲ join - အမှား၏ပုံမှန်အသုံးပြုမှု: မမှန်ကန်တဲ့လုပ်ထုံးလုပ်နည်းစားပွဲပေါ်မှာ
လက်ဝဲပြင်မှာလုပ်အခြေခံပညာအမှားတွေစားပွဲနှစ်ခုပူးပေါင်းဖို့:
- မှန်ကန်စွာဒေတာကိုဆုံးရှုံးခဲ့သည့်အဘို့စားပွဲ၏အမိန့်ကိုရှေးခယျြ။
- အမှားများနဲ့မေးမြန်းမှုတွေကိုအသုံးပြုတဲ့အခါစားပွဲ join အဘယ်မှာရှိ။
ပထမဦးဆုံးအမှားစဉ်းစားပါ။ မည်သည့်ပြဿနာများ၏ဆုံးဖြတ်ချက်မတိုင်မီကရှင်းရှင်းလင်းလင်းကျနော်တို့အဆုံး၌အရလိုချင်တာတွေကိုနားလည်ကြရပါမည်။ အထက်ကဒီဥပမာထဲမှာ, ကျနော်တို့လူမျိုး၏တိုင်းတစ်ခုတည်းတဦးတည်း ယူ. , ဒါပေမယ့်လုံးဝအဘယ်သူ၏ပိုင်ရှင်မတွေ့ရှိခဲ့သည်အရေအတွက်ကို 2, အောကျအရာဝတ္ထုနဲ့ပတ်သက်တဲ့သတင်းအချက်အလက်ဆုံးရှုံးခဲ့ရသည်။
ငါတို့သည်အချို့သောအရပ်တွင်တစ်ဦးစုံစမ်းမှုအတွက်စားပွဲပြောင်းရွေ့နှင့်အတူစတင်ပါလိမ့်မယ် အကယ်. « ... Realty မှစ. ပြည်သူ့ join left ... »တစုံတယောက်သောသူသည်ပစ္စည်းဥစ္စာပိုင်ဆိုင်မှုကျနော်တို့ဆုံးရှုံးမှာမဟုတ်ဘူး, သင်ကလူအကြောင်းကိုပြောပြလိမ့်မည်မဟုတ်ပါ။
ဒါပေမယ့်တူညီသည့်လိုင်းရလဒ်များနှင့်ကိုက်ညီခြင်းတွင်ထည့်သွင်းထားတဲ့လက်ဝဲဆက်သွယ်မှုပြင်ပအပြည့်အဝမှ switch ကို၏ထိတ်လန့်လျက်နှင့်မဖြစ်ပါဘူး။
အားလုံးပြီးနောက် နမူနာများ၏အသံအတိုးအကျယ် ကိုမကြာခဏအလွန်ကြီးမားသည်နှင့်အပိုဒေတာတကယ်အသုံးမကျဖြစ်ပါတယ်။ အဓိကအရာ - သင်ရလဒ်ရဖို့လိုချင်တာတွေထုတ်တွက်ဆရန်သူတို့၏ရရှိနိုင်ပိုင်ဆိုင်မှုများစာရင်းကိုသို့မဟုတ်၎င်းတို့၏ပိုင်ရှင်များနှင့်အတူတစ်ခုလုံးကိုပိုင်ဆိုင်မှုစာရင်း (ရှိပါက) နှင့်အတူလူအားလုံး၏။
လက်ဝဲ join - အမှား၏ပုံမှန်အသုံးပြုမှု: အဘယ်မှာရှိအခွအေနမြေား setting သည့်အခါတောင်းဆိုခြင်းမှန်ကန်
ဒုတိယအမှားကိုလည်းအချက်အလက်များ၏အရှုံးနဲ့ဆက်စပ်နှင့်အမြဲချက်ချင်းသိသာမဟုတ်ဖြစ်ပါတယ်။
ကျွန်တော်တို့ဟာလူအပေါငျးတို့နှင့်၎င်းတို့၏လက်ရှိပိုင်ဆိုင်မှုအတွက်ဒေတာကိုလက်ခံရရှိဆက်သွယ်မှုမှတဆင့်ထွက်ခွာသွားကြသောအခါရဲ့ပြန်စုံစမ်းမှုသို့သွားကြကုန်အံ့။ လက်ဝဲဘက်နှင့်အတူအောက်ပါကိုသတိရပါ SQL ဥပမာ join:
ပြည်သူ့လက်ဝဲမှ Realty_peoples ON Peoples.id = Realty_peoples.id_peoples JOIN; |
ကျနော်တို့တောင်းဆိုချက်ရှင်းလင်းချင်ဆိုပါစို့နှင့် output ကိုတရားဥပဒရှိရာအမျိုးအစားဒေတာ, မ - "အိမ်ခြံမြေ" ။ ကျနော်တို့ရိုးရှင်းစွာ append လြှငျ, လက်ဝဲသုံးပြီး SQL အောက်ပါအခြေအနေတစ်ရပ်ဥပမာ join:
...
အဘယ်မှာရှိ type ကို <> "အိမ်ခြံမြေ" |
ကျွန်တော်အောက်မှာဖေါ်ပြတဲ့အတိုင်းတရားမဝင်သောတန်ဖိုးကို Null နှိုင်းယှဉ်မရသောကြောင့်အဘယ်သူမျှပိုင်ဆိုင်မှုရှိသည်သောသူကလူပေါ်ဒေတာကိုဆုံးရှုံးပါလိမ့်မယ်:
Query1 | ||||||
အိုင်ဒီ | L_name | F_name | Middle_name | မှေးနေ့ | id_realty | ပုံစံ |
5 | Gerasimovsky | မျှော်လင့်ချက် | P. | 14.03.1992 | 4 | ဘုံအစိတ်အပိုင်းများ |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | ဘုံအစိတ်အပိုင်းများ |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
8 | Sukhanovskaya | ဂျူလီယာ | Y. | 01.10.2001 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
ဒီအကြောင်းပြချက်ဖြစ်ပွားခြင်းမှအမှားများကိုကာကွယ်တားဆီးဖို့, က connection ကိုအပေါ်သို့ချက်ချင်းရွေးချယ်ရေးခွအေနအေသတ်မှတ်ထားဖို့အကောင်းဆုံးဖြစ်ပါတယ်။ ကျနော်တို့ SQL ဥပမာ join လက်ဝဲနှင့်အတူအောက်ပါစဉ်းစားရန်အကြံပြုအပ်ပါသည်။
ပြည်သူ့ SELECT ။ *, Realty_peoples.id_realty, Realty_peoples.type လူများထံမှ LEFT Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples AND အမျိုးအစား <> "အိမ်ခြံမြေ") JOIN |
အောက်မှာဖေါ်ပြတဲ့အတိုင်းရလဒ်ဖြစ်လိမ့်မည်:
Query1 | ||||||
အိုင်ဒီ | L_name | F_name | Middle_name | မှေးနေ့ | id_realty | ပုံစံ |
1 | Ivanova | Daria | ခ | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 | ||
3 | Evgenin | အလက်ဇန်းဒါး | Federovich | 04/30/1964 | ||
4 | Annina | ချစ်ခြင်းမေတ္တာ | P. | 31.12.1989 | ||
5 | Gerasimovsky | မျှော်လင့်ချက် | P. | 14.03.1992 | 4 | ဘုံအစိတ်အပိုင်းများ |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | ဘုံအစိတ်အပိုင်းများ |
7 | Sukhanovskaya | ဂျူရီလူကြီးစု | အေ | 09/25/1976 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
8 | Sukhanovskaya | ဂျူလီယာ | Y. | 01.10.2001 | 3 | စုစုပေါင်းပူးတွဲပိုင်ဆိုင်မှု |
ထို့ကြောင့်ဘယ်ဖက်ဖို့ရိုးရှင်းတဲ့ SQL ဥပမာ join အောက်ပါအသုံးပြုပုံကျနော်တို့နောက်ထပ်တစ်ခုရှယ်ယာ / ပူးတွဲပိုင်ဆိုင်မှုတွင်ဤဂုဏ်သတ္တိ၏တဦးတည်းရွေ့လျားလူအပေါင်းတို့ကိုများစာရင်းကိုလက်ခံရရှိခဲ့သည်။
တစ်ဦးနိဂုံးချုပ်အဖြစ်ငါဒေတာဘေ့စကနေမဆိုသတင်းအချက်အလက်နမူနာတာဝန်သိယူခံရဖို့လိုအပျကွောငျးတစ်ဖန်ပြန်လည်အလေးပေးပြောကြားချင်ပါတယ်။ သင်ပင်အခြေခံစုံစမ်းမှုရေးသားဖို့စတင်မှီ, သငျသညျဂရုတစိုက်ကျနော်တို့အဆုံး၌အရချင်သောအရာကိုနားလည်သဘောပေါက်ရန်ရမယ် - လက်ဝဲဘက်နှင့်ငါတို့ကိုများ၏ရှေ့မှောက်၌ဖွင့်လှစ်ခဲ့အတော်များများတစ်ခုလုံးကိုပြည့်ပြည့်စုံစုံ SQL ရိုးရှင်းတဲ့ဥပမာ, အရာတစျခု၏ရှင်းပြချက်ကိုဆက်သွယ်နိုင်ပါသည်။ ကံကောင်းပါစေ!
Similar articles
Trending Now