Tuesday, June 11, 2013

DBMS Lab Test Answers

ဟိုတစ္ခါတင္ေပးထားတဲ့ ေမးခြန္းရဲ ့အေျဖေတြပါ... မသိရင္  http://ucsytutorials.blogspot.com/2013/06/dbms-lab-test-old-question-for-3rd-years.html ဒီမွာ ျပန္ႀကည့္.... ဒါမွမဟုတ္ 3rd year(F) ခန္းကလူေတြေမးႀကည့္... F ခန္းထဲမွာ ဆရာမေရးေပးသြားတဲ့ Lab Test ေမးခြန္းေဟာင္း...
ေမးခြန္းက ပထမဆံုး JJCOFFEESHOP ဆိုတဲ့ Database တစ္ခုေဆာက္ခိုင္းတယ္။ အဲဒီမွာ username နဲ့ password ပါထည့္ခိုင္းတယ္။ username နဲ့ password ထည့္တာကို မႏွစ္က မသင္ဘဲနဲ့ ေမးသြားတယ္...ေတာ္ေတာ္မ်ားမ်ားတိုင္ပတ္ကုန္တာေပါ့ဗ်ာ.... အခုေတာ့ လြယ္သြားပါျပီ။
ပထမဆံုး JJCOFFEESHOP ဆိုတဲ့ Database တစ္ခုေဆာက္မယ္ဗ်ာ...

mysql> CREATE DATABASE JJCOFFEESHOP;
mysql> USE JJCOFFEESHOP;

ေအာက္က use JJCOFFEESHOP ဆိုတာက ကြ်န္ေတာ္တို ့ေဆာက္ထားတဲ့ JJCOFFEESHOP ကို သံုးမယ္ေပါ့ဗ်ာ. ျပီးရင္ username နဲ ့ password ေပးမယ္...

mysql> CREATE USER 3CS00 IDENTIFIED BY 'passwd';

အဲဒီမွာ 3CS00 ဆိုတာက username ျဖစ္ျပီးေတာ့ passwd က password ပါ။ သတိထားရမွာက password ကို single qoute (') နဲ့ ေရးရမွာပါ..အဖြင့္ေကာ အပိတ္ေကာေပါ့။ အဲလိုမဟုတ္ရင္ error ျပေနလိမ့္မယ္။
ေနာက္တစ္ခုက ကြ်န္ေတာ္တို ့DB ထဲမွာ table ေတြထည့္မယ္။ ထည့္ရမယ့္ Table ေတြက ေမးခြန္းမွာပါျပီးသားပါ..။ Table 3 ခုရွိတယ္... CUSTOMER ရယ္ ITEM ရယ္ SALE ရယ္။ အရင္ဆံုး CUSTOMER Table ကိုအရင္ထည့္မယ္။

mysql> CREATE TABLE CUSTOMER (CNO CHAR(5) PRIMARY KEY, CNAME CHAR(10), LOCATION CHAR(15));

CUSTOMER Table ကိုေဆာက္ျပီးျပီ။ Table ေဆာက္တဲ့ေနရာမွာေတာ့ Error တက္တာ မရွိသေလာက္ပါပဲ... ကြင္းစ ကြင္းပိတ္ေလးေတြ၊ ေကာ္မာေတြ ေနာက္ဆံုးက semi column ေတြ အဲဒါေလးေတြေတာ့ သတိထားရမွာပါ..။ ကြ်န္ေတာ္တို ့ရဲ ့ Table ကိုျပန္ႀကည့္ခ်င္ရင္ေတာ့ Describe TableName ကိုသံုးရမွာပါ...။ မႀကည့္လဲ ရပါတယ္... Database ေတြ Table ေတြ ေဆာက္တဲ့အခါ မွန္တယ္ဆိုရင္ Query OK, ဆိုျပီး ျပမွာပါ... Error တက္ရင္လဲ Error ဆိုျပီးျပပါတယ္...။

mysql> DESCRIBE CUSTOMER;

အဲလိုဆိုရင္ကြ်န္ေတာ္တို ့ရဲ ့Table Information အျပည့္အစံုကို ေတြ ့ရမွာျဖစ္ပါတယ္။ ျပီးရင္ Table ထဲကို ေမးခြန္းမွာေပးထားတဲ့ Data ေတြထည့္မယ္။ Data ထည့္ဖို ့က INSERT ဆိုတာကို သံုးမယ္။

mysql> INSERT INTO CUSTOMER VALUES ("1", "Thein Thein", "Meikhtila"), ("2", "San San", "Mandalay");

ဒီမွာက Data ကို ၂ ခုပဲထည့္ျပထားတယ္။ တကယ္လုပ္ရမွာက ၅ ခုပါ (ေမးခြန္းမွာ ေပးထားတယ္)။ တစ္ခုသတိထားရမွာက ကြ်န္ေတာ္တို ့Table ေဆာက္တုန္းက ေႀကျငာခဲ့တဲ့ Value ေတြရဲ ့Type ေတြပါ။ ဥပမာ CNO ကို ကြ်န္ေတာ္တို ့CHAR လို ့ေႀကျငာခဲ့တယ္။ အဲဒါဆိုရင္ Data ထည့္တဲ့အခါက်ရင္ "1" ကို Double Quote "  နဲ့ေရးေပးရမယ္... INT တို့ NUMERIC တို ့ဆိုရင္ေတာ့ မလိုပါဘူး။ ကြ်န္ေတာ္တို ့ထည့္ထားတဲ့ Data ေတြျပန္ႀကည့္ခ်င္ရင္...

mysql> SELECT * FROM CUSTOMER;

ကြ်န္ေတာ္တို ့ထည့္ထားတဲ့ Data ေတြကို ေတြ ့ရမွာပါ... မေတြ ့ဘူးဆိုရင္ေတာ့ တစ္ခုခုမွားေနလို ့။ <br>
ေနာက္ထပ္ table တစ္ခုထပ္ေဆာက္ရမယ္ ITEM Table

mysql> CREATE TABLE ITEM(INO CHAR(5) PRIMARY KEY, INAME CHAR (15), PRICE NUMERIC (15));

CUSTOMER Table နဲ ့တူတူပါပဲ...ဘာမွသိပ္မထူးျခားပါဘူး... ခုနက အတိုင္းဆက္လုပ္ႀကတာေပါ့။

mysql> INSERT INTO ITEM VALUES ("1", "JJ Hot Coffee", 500), ("2", "JJ Cold Coffee", 500) ......... ;

ေမးခြန္းမွာေပးထားတဲ့အတိုင္း Data ေတြထည့္ပါ... ဘာမွမခက္ပါဘူး။ နဲနဲထူးျခားတာက ေနာက္ဆံုးက PRICE ဆိုတဲ့ variable က numeric လို ့ေႀကျငာထားလို ့ Double quote " ထည့္စရာမလို ပါဘူး။ <br>
ေနာက္ဆံုး Table ကေတာ့ နဲနဲခက္တယ္... နဲနဲပါ :D  SALE  Table ကိုႀကည့္ရင္ သူ ့မွာ CUSTOMER နဲ့ ITEM Table ေတြက CNO နဲ့ INO ဆိုတာ ျပန္ပါေနတာေတြ ့ရတယ္...။ အဲဒါေႀကာင့္ CNO နဲ့ INO ကို PRIMARY KEY အျဖစ္ CUSTOMER နဲ့ ITEM  Table ေတြမွာ ေႀကျငာျပီး  FOREIGN KEY အျဖစ္ SALE Table မွာ ေႀကျငာေပးရမယ္...။
ကုတ္ေတြကနဲနဲေတာ့ ရွုပ္တယ္...

mysql> CREATE TABLE SALE (CNO CHAR(5), INO CHAR(5), QTY NUMERIC (5), PRIMARY KEY (CNO, INO), FOREIGN KEY (CNO) REFERENCES CUSTOMER(CNO), FOREIGN KEY (INO) REFERENCES ITEM(INO));

အဲဒီမွာ သတိထားဖို့က CNO နဲ့ INO ကို ေႀကျငာတဲ့အခါ CHAR(5) လို့ပဲေႀကျငာရမယ္. ဘာလို ့လဲဆိုေတာ့  CUSTOMER Table နဲ့ ITEM Table ေတြမွာေႀကျငာတုန္းက အတိုင္း အကုန္တူမွ Table Create လုပ္တာမွန္မွာမုိ့လို့ပါ... မဟုတ္ရင္ Error တက္မွာ...
ျပီးရင္ INSERT ကိုသံုးျပီး အရင္ Table ေတြလို Data ထည့္လို ့ရျပီ။

mysql> INSERT INTO SALE ("...............................");

(အကုန္မေရးျပေတာ့ဘူးဗ်ာ... လက္ေညာင္းလို ့ :D)

Database ေဆာက္တာျပီးျပီ။ ေမးခြန္း ၅ ခုေျဖဖို ့ပဲ က်န္ေတာ့တယ္....
နံပါတ္ ၁ ေမးခြန္းက CUSTOMER Table က Location Yangon ျဖစ္တဲ့လူရဲ ့ Records ေတြအကုန္ထုတ္ေပးပါလို ့ဆိုပါတယ္။ လြယ္ပါတယ္.....။

mysql> SELECT * FROM CUSTOMER WHERE LOCATION = "Yangon";

နံပါတ္ ၂ ေမးခြန္းက SALE Table ထဲကို Data ထပ္ထည့္ခိုင္းတာပါ...။

mysql> INSERT INTO SALES VALUES ("3", "5", 2);

နံပါတ္ ၃ ေမးခြန္းက ITEM Table ထဲက JJ Cake ရဲ ့ PRICE ကို ၄၀၀ လို ့ျပင္တာပါ။

mysql> UPDATE ITEM SET PRICE=400 WHERE INAME="JJ Cake";

နံပါတ္ ၄ ေမးခြန္းက CUSTOMER Table ထဲက LOCATION Sittwe ျဖစ္တဲ့ CUSTOMER ရဲ ့ records ေတြကို ဖ်က္ခိုင္းတာပါ။ ဒါလဲ မခက္ပါဘူး။ <br>

mysql> DELETE FROM CUSTOMER WHERE LOCATION ="Sittwe";

နံပါတ္ ၅ ေမးခြန္းကေတာ့ ခက္တယ္ဗ်... 1000 ဖိုးထက္ပို၀ယ္တဲ့ CUSTOMER ရဲ ့ NAME ကိုရွာေပးရမွာ.... ကြ်န္ေတာ္တို ့စႀကည့္ရမွာက SALE Table ထဲက Data ေတြကို...
SALE Table ထဲက CNO 1 က INO 2 ကို 2 ခု ၀ယ္တယ္... အဲလိုႀကည့္တတ္ရမယ္။
CNO 1 ကိုျပန္ႀကည့္ရင္ လိုခ်င္တဲ့ CNAME က Thein Thein...
၀ယ္တာက INO 2 ဆိုေတာ့ JJ Cold Coffee...
ဘယ္ႏွစ္ခု၀ယ္လဲဆိုေတာ့  QTY က ၂ ခု...
အဲမွာ လိုခ်င္တာက ၁၀၀၀ ဖိုးအထက္၀ယ္လားဆိုတာကို လိုခ်င္တာ...အဲေတာ့ ကြ်န္ေတာ္တို ့ QTY နဲ့ PRICE နဲ့ကို ေျမွာက္ရမယ္...။  ေနာက္ျပီးေတာ့ SALE Table မွာ CUSTOMER တစ္ေယာက္ထဲက ထပ္၀ယ္ထားတာကိုေတြ ့တယ္...။  SALE Table ရဲ ့ ဒုတိယ row မွာေလ... CNO 1 က ပဲ INO 4 ကို ၂ ခုထပ္၀ယ္ထားတာဆိုေတာ့... အဲဒါကိုပါ ထည့္ေပါင္းေပးရမယ္... အဲလိုဆိုကြ်န္ေတာ္တို ့logic တစ္ခုရျပီ...  sum (sale.qty * item.price) 

mysql> SELECT CUSTOMER.CNAME, SUM(SALE.QTY * ITEM>PRICE) AS AMT FROM CUSTOMER.ITEM, SALE WHERE SALE.CNO = CUSTOMER.CNO
AND SALE.INO = ITEM.INO GROUP BY CUSTOMER.CNO HAVING AMT > 1000;


နဲနဲေတာ့ ရွုပ္တယ္... ရွင္းေအာင္ေတာ့ ေရးေပးထားတယ္ဗ်ာ... မရွင္းရင္ ဆရာမကို ေမး :D 
တစ္ခုေျပာခ်င္တာက စာေမးပြဲ (Lab Test) မွာေမးရင္ အဲလို ခပ္ရွုပ္ရွုပ္ေတြပဲေမးမွာ... ျပီးေတာ့ Lab Test ေျဖရမယ့္ ဘာသာေတြကို မ်ားမ်ားေလ့က်င့္ထားပါလို ့ေျပာခ်င္တယ္.. ဘာလို့လဲ ဆိုေတာ့ ကြ်န္ေတာ္တို ့ကိုေပးထားတဲ့အခ်ိန္က ကြက္တိပဲေနာ္... စာရိုက္ႀကာတာရယ္ Error ေတြရွင္းရတာရယ္... ဘယ္လိုေရးရမလဲဆိုတာ စဥ္းစားတာရယ္ဆို အခ်ိန္ကေလာက္ေတာင္မေလာက္ခ်င္ဘူး။ ဒီေတာ့ မ်ားမ်ားေလ့က်င့္ထားမွ အဆင္ေျပလိမ့္မယ္။ မဟုုတ္ရင္ေတာ့ တစ္၀က္တစ္ပ်က္နဲ့ ထြက္လာရလိမ့္မယ္...။



1 comment:

  1. ေကာင္းတယ္ဗ်ိဳ႕။ ကြ်န္ေတာ္တုိ႔ တုန္းကေတာ့ ရွာၾကည့္စရာလည္းမရွိ..။
    သယ္ရင္းေတြပဲေမးရတာ။ ကိုယ္ကုိယ္တုိင္လည္း ဒီလုိဘေလာ့ တစ္ခုေရးခ်င္ေပမဲ့ မေရးႏုိင္ေသးဘူး.။ အားေပးတယ္ဗ်ိဳ႕..။

    ReplyDelete