Monday, July 1, 2013

DBMS Practical 2 for 3rd years

ဒီအပုဒ္က အခန္းထဲမွာ ဆရာမေရးေပးတဲ့ အပုဒ္ပါ... ေမးခြန္းက ရွည္ေတာ့ ebook ေလးလုပ္ထားတယ္။ သိမ္းထားျပီး Lab Test ေတြနီးမွ ျပန္ႀကည့္လဲ ရတာေပါ့။ ေအာက္မွာေမးခြန္းကို အရင္ေဒါင္းလိုက္ပါ။
Download

အရင္ဆံုး Database တစ္ခုအရင္ေဆာက္မယ္။ က်ေနာ္ စက္ထဲမွာ run ရမယ့္ ကုတ္ေတြကို အစိမ္းေရာင္နဲ့ ျပေပးထားတယ္။

mysql> create database pra2;
Query OK, 1 row affected (0.01 sec)

mysql> use pra2;
Database changed



ျပီးရင္ table ေတြထည့္ႀကမယ္... အရင္ဆံုး Student table ကိုအရင္ထည့္မယ္... (ေမးခြန္းမွာ table ပံုစံပါတယ္) Query Ok တို ့Database Changed တို ့ဆိုတာက က်ေနာ္တို ့လုပ္ခဲ့တဲ့ process မွန္တယ္ဆိုတာကို ျပေပးတာပါ..။ ေနာက္ဟာေတြက်ရင္ က်ေနာ္အဲဒါေလးေတြ ျဖဳတ္ထားခဲ့ေတာ့မယ္။

mysql> create table Student(sid CHAR(5) primary key, sname CHAR(20), major CHAR(10), level CHAR(10),age numeric(10));

table ေဆာက္တဲ့ေနရာမွာ က်ေနာ္တို ့primary key ေတြ foreign key ေတြ သတ္မွတ္ေပးရတယ္... ဘာလို ့လဲ ဆိုေတာ့ ေနာက္ဆံုးေဆာက္ရမယ့္ table မွာ ပထမ table ၂ ခုက column ေတြ ျပန္ပါေနလို ့...အဲဒါေႀကာင့္ Student table ထဲက column တစ္ခုျဖစ္တဲ့ sid က primary ပါ... Enrolled table မွာ ျပန္ပါမယ့္ Sid column က foreign key ပါလို ့သတ္မွတ္တာပါ။ အဲဒါေတြ မမွန္ရင္ က်ေနာ္တို ့table ေတြ ခ်ိတ္တဲ့အခါက်ရင္ error တက္မွာ...
ေနာက္ Class table ေဆာက္မယ္။

mysql> create table Class(cname CHAR(10) primary key, instructor CHAR(20), room CHAR(5));

ေနာက္ဆံုးတစ္ခု Enrolled table ေဆာက္တာမွာ နဲနဲေလး ဂရုစိုက္ရမယ္... အဲဒီ table မွာprimary key , foreign key ေတြ အျပင္ on delete cascade ဆိုတာပါေနတယ္။

mysql> create table Enrolled(sid CHAR(5),cname CHAR(10), primary key(sid,cname), foreign key(sid) references Student(sid) on delete cascade, foreign key(cname) references Class(cname) on delete cascade);

 ဒီ table မွာ primary key သတ္မွတ္တာေတာ့ ေျပာစရာမလိုေတာ့ဘူး၊၊ foreign key သတ္မွတ္တာမွာ အေနာက္က references ဆိုျပီးလိုက္တာက က်ေနာ္တို ့foreign key အေနနဲ့ ထားခဲ့တဲ့ column ဟာ ဘယ္ table က column ပါဆိုျပီး ေႀကျငာလိုက္တာ...
ေနာက္ျပီး on delete cascade ဆိုျပီးေႀကျငာတာက က်ေနာ္တို ့ ေမးခြန္း နံပါတ္ ၃ က delete လုပ္ခိုင္းတဲ့ အပုဒ္တစ္ပုဒ္.... on delete cascade မတပ္ရင္ အဲဒီ အပုဒ္ေရးရင္ error တက္နိုင္တယ္...။ ဘာလို့လဲဆိုေတာ့ က်ေနာ္တို ့delete လုပ္မယ့္ data ေတြက Enrolled table ထဲက ေန က်န္တဲ့ table ၂ ခုလံုးကို ခ်ိတ္ျပီးမွ delete လုပ္မွာမို ့လို့။ ဒါျပီးသြားျပီဆိုရင္ က်ေနာ္တုိ ့table သံုးခုလံုး ေဆာက္လို ့ျပီးသြားျပီ။ table ထဲကုိ data ေတြ ထည့္ရမယ္...။ ထည့္ရမယ့္ data ေတြကို ေမးခြန္းမွာေပးထားတယ္ေနာ္...။ ဘယ္လိုထည့္ရမလဲဆိုေတာ့ insert into သံုးျပီးထည့္ရမယ္... လြယ္ပါတယ္ဗ်ာ.. ဒီအဆင့္ေလးေတာ့ ကိုယ့္ဘာကို လုပ္ႀကည့္လိုက္... က်ေနာ္ ေရးမျပေတာ့ဘူး... :D
No-1
အခု နံပါတ္ ၁ ေမးခြန္း စေျဖမယ္... က်ေနာ္တို ့လုပ္ရမွာက Student table ထဲကို new information ထည့္ရမွာ... insert နဲ့လုပ္ရမွာေနာ္... Update လုပ္ရမွာမဟုတ္ဖူးးး ေမးခြန္းေသခ်ာဖတ္ႀကဦးးးး။
  
mysql> insert into Student values("203","Grace","Geology","Junior",18);

No-2
Class table ထဲက instructor name Smith ဆိုတာကို ျပင္ခိုင္းတာပါ..။ Update သံုးရမွာေပါ့။

mysql> update Class set instructor="Cindy" where cname="class-C";

No-3
လာျပီ... တစ္ပုဒ္လံုးမွာ အခက္ဆံုးပဲ... (နားလည္သြားရင္လဲ လြယ္သြားတာပါပဲ.. ) :D

mysql> delete Student from Student,Class,Enrolled where
         -> Enrolled.cname = Class.cname
         -> And Enrolled.sid = Student.sid
         -> And Class.room="R-2";


က်ေနာ္တို ့ဖ်က္ခ်င္တာက Room number R-2 မွာ အပ္ထားတဲ့ ေက်ာင္းသားေတြရဲ ့information အကုန္လံုးကို delete လုပ္သြားမွာ.. အဲေတာ့ က်ေနာ္တုိ ့table သံုးခုလံုးႀကည့္ရမယ္.. Class table ထဲက room ဆိုတဲ့ column ကိုႀကည့္မယ္.. အဲဒီ room ထဲမွာမွ R-2 ဆိုတာကိုႀကည့္မယ္.. R-2 မွာ အပ္ထားတဲ့ ေက်ာင္းသားကို တန္းမေတြ ့ရဘူး class name ကိုပဲေတြ ့ရေတာ့ class-A ဆိုတာကိုမွတ္ထားလိုက္...။ အဲဒါကိုမွ Enrolled Table မွာႀကည့္လိုက္ေတာ့ sid ကိုေတြ ့ရျပီ.. အဲဒီ sid ရဲ ့row တစ္ခုလံုးကို ဖ်က္မယ္...။ နားလည္မယ္ထင္ပါတယ္။

No-4
သူလဲ ခုနက ဟာနဲ့ သိပ္မကြာဘူး... ဒီမွာက်ေတာ့ room number နဲ့မသြားဘဲ instructor name နဲ့ ႀကည့္တာ... ဒီအပုဒ္ကေတာ့ delete လုပ္ခုိင္းတာမဟုတ္ဖူး. select  နဲ့လုပ္ရမွာ....

mysql> select sname from Student,Class,Enrolled
    -> where Enrolled.cname = Class.cname
    -> and Enrolled.sid = Student.sid
    -> and Class.instructor = "James";


ဒီ အတိုင္းေရးလို ့မွန္တယ္ဆိုရင္ output ေလးတစ္ခုထြက္လာမွာပါ... ။
Mar
Elaine

အဲလိုေလးရလိမ့္မယ္

No-5
ေမးခြန္းက ရွင္းရွင္းေလးမို ့ထပ္ရွင္းမေနေတာ့ဘူးေနာ္... ေမးခြန္းပဲ ဖတ္ႀကည့္လိုက္ပါ.. ဒီမွာ သံုးရမွာက max ဆိုတဲ့ function ေလးတစ္ခုသံုးရလိမ့္မယ္... ဘာလိုလဲ ဆိုေတာ့ အသက္အႀကီးဆံုး ေက်ာင္းသားကိုလိုခ်င္တယ္လို ့ေျပာထားလို ့... 

mysql> select max(age) from Student where
         -> Student.major = "Chemistry" or
         -> Student.major = "English";


ထြက္လာမယ့္ output က 21 ပါ။

No-6
ဒါေလကေတာ့ ေတာ္ေတာ္ေလးလြယ္ပါတယ္... ။

mysql>select sname from Student;

သူက Student table ထဲက sname ေတြခ်ည္းပဲျပသြားလိမ့္မယ္..

No-7
 
 mysql> select sname from Student,Enrolled where
          -> Enrolled.sid = Student.sid and
          -> Enrolled.cname = "Class-E";

  table 2 ခုပဲ ခ်ိတ္သြားတယ္... ဘာလို ့လဲ ဆိုေတာ့ Class Table ကိုခ်ိတ္စရာမလိုဘူး... မးခြန္းမွာႀကည့္ႀကည့္။ သူ ့ရ ့output က Empty Set ဆုိျပီးထြက္လာလိမ့္မယ္။

No-8
ဒီေမးခြန္းကလဲ ြယ္ပါတယ္... Table ေတြခ်ိတ္စရာေတာင္မလိုဘူးးး စာေမးပြဲမွာ အဲလိုေလးဘဲေမးရင္ သိပ္ေကာင္းမွာ... :D
mysql> select sname from Student where age > 18;

သူနဲ့ သက္ဆိုင္တဲ့ sname ေတြထြက္လာလိမ့္မယ္...

That's all ~~~  :D



No comments:

Post a Comment