our notes for our youngers

September 18, 2009

basic of SQL Statement (part 6)

Filed under: SQL Commands — Tags: , , , , , , — sevenlamp @ 10:00 AM

Sql statement ေတြဘက္ကိုေတာ့ မလွည့္ျဖစ္တာ ေတာ္ေတာ္ၾကာသြားျပီ။ ကြၽန္ေတာ္လည္း ေရးခ်င္တာေတြကေတာ့ အမ်ားၾကီး အခ်ိန္ကမရွိဘူးျဖစ္ေနတာနဲ႔ ေရွ႕မဆက္နိုင္ဘူးျဖစ္ေနတာ။ ဘာဘဲျဖစ္ျဖစ္ ရတဲ႔အခ်ိန္ေလးလုျပီး ကြၽန္ေတာ္သိသေလာက္ေတာ့ ထပ္ေရးေနဦးမွာမို႔ အားေပးၾကပါဦးဗ်ာ။ ကဲ… ကြၽန္ေတာ္တို႔ select statement ကို ေျပာလက္စ ဆက္ပါဦးမယ္။ table တစ္ခုထဲက data ကို ထုတ္ၾကည့္တာကိုေတာ့ နားလည္ေလာက္ျပီထင္ပါတယ္။ အခု ကြၽန္ေတာ္တို႔ တစ္ခုထက္ပိုတဲ႔ table ေတြထဲက data ေတြကို ထုတ္ၾကည့္ရေအာင္။ ဥပမာဗ်ာ… item table ထဲက record အားလံုးျပမယ္ဆိုပါေတာ့။ ဒါေပမယ့္ categoryid အစား categoryname ကိုျပခ်င္တယ္ဆိုရင္၊ item table နဲ႔ category table ၂ ခုကို ခ်ိတ္ရေတာ့မွာပါ။ ဟုတ္ျပီ… ဒါဆိုရင္ table ေတြ ခ်ိတ္ဖို႔အတြက္ ဘာေတြလိုလဲ… ?

ဟုတ္ကဲ႔ table တစ္ခုနဲ႔ တစ္ခုခ်ိတ္ဆက္တာကို join လုပ္တယ္လို႔ ေခၚပါတယ္။ join နည္း ၃ မ်ိဳးရွိပါတယ္။

၁) cross join

Cross join ကေတာ့ table ၂ ခုကို comer(,) ခံျပီး join တာပါ။ ဒီလိုမ်ိဳးပါ

select item.*, category.categoryName
from item, category

result

ItemID ItemName CategoryID Price Balance Remark CategoryName
1 Sony Optical Mouse 1 2500 10 Computer
2 A4 Tech Keyboard 1 5000 1 Computer
3 ViewSonic 17” Flat CRT 1 15000 5 Computer
4 First Eleven Book 2 500 15 Computer
5 SONY 32” TV 3 900000 1 Computer
6 Moon 16” Stand Fan 3 20000 3 Computer
1 Sony Optical Mouse 1 2500 10 Stationary
2 A4 Tech Keyboard 1 5000 1 Stationary
3 ViewSonic 17” Flat CRT 1 15000 5 Stationary
4 First Eleven Book 2 500 15 Stationary
5 SONY 32” TV 3 900000 1 Stationary
6 Moon 16” Stand Fan 3 20000 3 Stationary
1 Sony Optical Mouse 1 2500 10 Electronic
2 A4 Tech Keyboard 1 5000 1 Electronic
3 ViewSonic 17” Flat CRT 1 15000 5 Electronic
4 First Eleven Book 2 500 15 Electronic
5 SONY 32” TV 3 900000 1 Electronic
6 Moon 16” Stand Fan 3 20000 3 Electronic
1 Sony Optical Mouse 1 2500 10 Clothes
2 A4 Tech Keyboard 1 5000 1 Clothes
3 ViewSonic 17” Flat CRT 1 15000 5 Clothes
4 First Eleven Book 2 500 15 Clothes
5 SONY 32” TV 3 900000 1 Clothes
6 Moon 16” Stand Fan 3 20000 3 Clothes
1 Sony Optical Mouse 1 2500 10 Kitchen wares
2 A4 Tech Keyboard 1 5000 1 Kitchen wares
3 ViewSonic 17” Flat CRT 1 15000 5 Kitchen wares
4 First Eleven Book 2 500 15 Kitchen wares
5 SONY 32” TV 3 900000 1 Kitchen wares
6 Moon 16” Stand Fan 3 20000 3 Kitchen wares

cross join လို႔ ဆိုတဲ႔ အတိုင္းပါပဲ။ ဒီပံုစံက table ၂ ခုကို ေျမွာက္လို႔ရတဲ႔ အတိုင္း result ထြက္ပါတယ္။ item ထဲမွာက record ၆ ေၾကာင္း၊ category ထဲမွာက record ၅ ေၾကာင္း ရွိပါတယ္။ ဒါေၾကာင့္ အေပၚက query ကို run လိုက္ရင္ record စုစုေပါင္း အေၾကာင္း ၃၀ ထြက္ပါလိမ့္မယ္။ item table ထဲက record ၁ေၾကာင္းစီ အတြက္ category table ထဲမွာ record ရွိသေလာက္ကို ထုတ္ျပသြားတာပါ။ ကြၽန္ေတာ္က ့ အကုန္မထုတ္ပဲ item table ထဲမွာ ပါတဲ႔ categoryID နဲ႔ category table ထဲမွာပါတဲ႔ categoryID တူတဲ႔ record ေတြပဲ ထုတ္ျပခ်င္တယ္ဆိုရင္ေတာ့ ထြက္လာတဲ႔ result ကို condition ျပန္စစ္ဖို႔ လိုပါတယ္။ ဒါေၾကာင့္ ကြၽန္ေတာ္တို႔ where ကို သံုးျပီး အခုလို ေရးရပါမယ္။

select item.*, category.categoryName
from item, category where item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName
1 Sony Optical Mouse 1 2500 10 Computer
2 A4 Tech Keyboard 1 5000 1 Computer
3 ViewSonic 17” Flat CRT 1 15000 5 Computer
4 First Eleven Book 2 500 15 Stationary
5 SONY 32” TV 3 900000 1 Electronic
6 Moon 16” Stand Fan 3 20000 3 Electronic

၂) inner join
Inner join က cross join ကို where ထည့္ထားတဲ႔ ပံုစံနဲ႔ တူပါတယ္။ table ၂ ခုကို join ဖို႔အတြက္ On keyword ကိုသံုးပါတယ္။ ဒီလိုမ်ိဳးပါ..

select item.*, category.categoryName
from item inner join category
on item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName
1 Sony Optical Mouse 1 2500 10 Computer
2 A4 Tech Keyboard 1 5000 1 Computer
3 ViewSonic 17” Flat CRT 1 15000 5 Computer
4 First Eleven Book 2 500 15 Stationary
5 SONY 32” TV 3 900000 1 Electronic
6 Moon 16” Stand Fan 3 20000 3 Electronic

inner join နဲ႔ေရးထားတဲ႔အတြက္ item table ထဲက categoryID က category table ထဲမွာ ရွိမေနဘူးဆိုရင္ အဲဒီ record ကို ထုတ္ျပေပးမွာမဟုတ္ပါဘူး။ ဟုတ္ျပီ တစ္ခါတေလမွာ ကြၽန္ေတာ္က item table ထဲက အားလံုးထုတ္ျပခ်င္တယ္၊ category table ထဲမွာ ရွိရင္ category name ျပျပီး၊ မရွိရင္ေတာ့ null ပဲေပၚလာခ်င္တယ္ဆိုရင္။ တနည္းအားျဖင့္ table တခုခုကို မူတည္ျပီး ျပခ်င္တယ္ဆိုရင္ ကြၽန္ေတာ္တို႔ inner join ကိုသံုးလို႔ မရေတာ့ပါဘူး။ ဒီအခါမွာ outer join ကိုသံုးရေတာ့မွာပါ။

၃) outer join
Outer join ကို ၂ ပိုင္းထပ္ခြဲနိုင္ပါတယ္။ Left outer join နဲ႔ Right outer join ပါ။ join keyword ရဲ႕ ဘယ္ဖက္က table ကို အကုန္ျပမယ္ဆိုရင္ left join နဲ႔ ေရးရျပီး။ join keyword ရဲ႕ ညာဖက္က table ကို အကုန္ျပခ်င္ရင္ေတာ့ right join နဲ႔ ေရးပါမယ္။

select item.*, category.categoryName
from item left join category
on item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName
1 Sony Optical Mouse 1 2500 10 Computer
2 A4 Tech Keyboard 1 5000 1 Computer
3 ViewSonic 17” Flat CRT 1 15000 5 Computer
4 First Eleven Book 2 500 15 Stationary
5 SONY 32” TV 3 900000 1 Electronic
6 Moon 16” Stand Fan 3 20000 3 Electronic
select item.*, category.categoryName
from item right join category
on item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName
1 Sony Optical Mouse 1 2500 10 Computer
2 A4 Tech Keyboard 1 5000 1 Computer
3 ViewSonic 17” Flat CRT 1 15000 5 Computer
4 First Eleven Book 2 500 15 Stationary
5 SONY 32” TV 3 900000 1 Electronic
6 Moon 16” Stand Fan 3 20000 3 Electronic
NULL NULL NULL NULL NULL NULL Clothes
NULL NULL NULL NULL NULL NULL Kitchen wares

left join လို႔ေရးေရး left outer join လို႔ပဲ ေရးေရး တူတူပါပဲ။ right join နဲ႔ right outer join လည္း တူတယ္ေနာ္။ ေနာက္ဆံုး query result မွာ null ေတြထြက္လာတာ ေတြ႔ရတယ္ေနာ္၊ ဘာလို႔လဲဆိုေတာ့ category table ကို မူတည္ျပီး ယူလိုက္ေတာ့ item table ထဲမွာ မရွိတာေတြအတြက္ null ေတြထြက္လာတာပါ။

2 Comments »

  1. visit regularly and carry on.

    Cheers and congratulation!

    Comment by pronek — September 18, 2009 @ 2:19 PM

  2. thanks you for your comment

    Comment by sevenlamp — September 18, 2009 @ 4:08 PM


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: