จากโครงร่างฐานข้อมูลเชิงสัมพันธ์ของระบบฐานข้อมูลงานซื้อขายสินค้าในซุปเปอร์สโตร์ในเรื่องที่ 7.2.2 ข้างต้น หากใช้ภาษาเอสคิวแอลเพื่อดำกนินการกับฐานข้อมูลจะประกอบด้วยขั้นตอนดังนี้
ขั้นตอนนี้เป็นการสร้างฐานข้อมูลและนำรีเลชันต่าง ๆ ที่ได้ทำการออกแบบไว้แล้วในเรื่องที่ 7.2.2 มาสร้างตารางในภาษาเอสคิวแอล โดยในที่นี้ขอเสนอตัวอย่างการสร้างตารางเพียง 4 รีเลชัน เท่านั้น คือ รีเลชันบริษัทขายส่ง รีเลชันสินค้า รีเลชันการขาย และรีเลชันใบเสร็จรับเงิน
- รีเลชันบริษัทขายส่ง ประกอบด้วยแอททริบิวต์ รหัสบริษัท ชื่อบริษัท ที่อยู่ โทรศัพท์ โดยมี แอททริบิวต์รหัสบริษัทเป็นคีย์หลัก
CREATE TABLE SALES_ORG
(SALE_NO INTEGER NOT NULL UNIQUE,
SALE_NAME CHAR(15) NOT NULL UNIQUE,
SALE_ADD CHAR(20),
SALE_TEL CHAR(9),
PRIMARY KEY (SALE_NO));
- รีเลชันสินค้า ประกอบด้วยแอททริบิวต์ รหัสสินค้า ชื่อสินค้า สินค้าในคลัง ราคาขายต่อหน่วย จุดสั่งซื้อ โดยมีแอททริบิวต์รหัสสินค้าเป็นคีย์หลัก และแอททริบิวต์รหัสบริษัทเป็นคีย์นอกที่ใช้ในการเชื่อมโยงข้อมูลกับรีเลชันบริษัทขายส่ง
CREATE TABLE GOOD
(GOOD_NO CHAR(5) NOT NULL UNIQUE,
GOOD_NAME CHAR(15) NOT NULL,
STOCK INTEGER,
SALE_PRI DECIMAL,
REORD_PT INTEGER,
SALE_NO INTEGER,
PRIMARY KEY (GOOD_NO),
FOREIGN KEY (SALE_NO) REFERENCES SALES_ORG (SALE_NO));
- รีเลชันใบเสร็จรับเงิน ประกอบด้วยแอททริบิวต์ เลขที่ใบเสร็จรับเงิน วันที่ออกใบเสร็จ โดยมี แอททริบิวต์เลขที่ใบเสร็จรับเงินเป็นคีย์หลัก
CREATE BILL
(BILL_NO INTEGER NOT NULL UNIQUE,
BILL_DATE DATE,
PRIMARY KEY (BILL_NO));
- รีเลชันการขาย ประกอบด้วยแอททริบิวต์ เลขที่ใบเสร็จรับเงิน รหัสสินค้า จำนวนที่ขาย โดยมี แอททริบิวต์เลขที่ใบเสร็จรับเงินและรหัสสินค้าประกอบกันเป็นคีย์หลัก แอททริบิวต์เลขที่ใบเสร็จรับเงินเป็น คีย์นอกที่ใช้ในการเชื่อมโยงข้อมูลกับรีเลชันใบเสร็จรับเงิน และแอททริบิวต์รหัสสินค้าเป็นคีย์นอกที่ใช้ใน การเชื่อมโยงข้อมูลกับรีเลชันสินค้า
CREATE DETAIL
(BILL_NO INTEGER NOT NULL,
GOOD_NO CHAR(5),
AMT_SALE INTEGER,
PRIMARY KEY (BILL_NO, GOOD_NO),
FOREIGN KEY (BILL_NO) REFERENCES BILL(BILL_NO),
FOREIGN KEY (GOOD_NO) REFERENCES GOOD (GOOD_NO));
เมื่อได้ทำการสร้างตารางจากรีเลชันต่าง ๆ เรียบร้อยแล้ว ขั้นตอนนี้จะเป็นการป้อนข้อมูลลงใน ตารางข้อมูลทีละทูเพิล โดยในที่นี้ขอเสนอเฉพาะตัวอย่างการป้อนข้อมูลลงในตารางทั้ง 4 จากข้อ 1 คือ SALES_ORG GOOD BILL และ DETAIL
- การป้อนข้อมูลลงในตาราง SALES_ORG
หากต้องการป้อนข้อมูล รหัสบริษัท คือ 1001 ชื่อบริษัท คือ KIDSIRI ที่อยู่ คือ BANGKOK และโทรศัพท์ คือ 028585075 ทำได้ดังนี้
INSERT INTO SALES_ORG (SALE_NO, SALE_NAME, SALE_ADD, SALE_TEL)
VALUES (1001, KIDSIRI, BANGKOK, 028585075);
ผลจากคำสั่งดังกล่าว จะทำให้สดมภ์ SALE_NO มีค่า 1001 สดมภ์ SALE_NAME มีค่า KIDSIRI SALE_ADD มีค่า BANGKOK และสดมภ์ SALE_TEL มีค่า 028585075 บรรจุอยู่
SALE_NO |
SALE_NAME |
SALE_ADD |
SALE_TEL |
1001 |
KIDSIRI |
BANGKOK |
028585075 |
- การป้อนข้อมูลลงในตาราง GOOD
หากต้องการป้อนข้อมูล รหัสสินค้า คือ E-003 ชื่อสินค้า คือ VIDEO สินค้าในคลัง คือ 250 ราคาขายต่อหน่วย คือ 5500 จุดสั่งซื้อ คือ 20 และรหัสบริษัท คือ 1002 ทำได้ดังนี้
INSERT INTO GOOD (GOOD_NO, GOOD _NAME, STOCK, SALE_PRI,
REORD_PT, SALE_NO)
VALUES (E-003, VIDEO, 250, 5500, 20, 1002);
ผลจากคำสั่งดังกล่าว จะทำให้สดมภ์ GOOD_NO มีค่า E-003 สดมภ์ GOOD _NAME มีค่า VIDEO ให้สดมภ์ STOCK มีค่า 250 สดมภ์ SALE_PRI มีค่า 5500 สดมภ์ REORD_PT มีค่า 20 และสดมภ์ SALE_NO มีค่า 1002 บรรจุอยู่
GOOD_NO |
GOOD _NAME |
STOCK |
SALE_PRI |
REORD_PT |
SALE_NO |
E-003 |
VIDEO |
250 |
5500 |
20 |
1002 |
- การป้อนข้อมูลลงในตาราง BILL
หากต้องการป้อนข้อมูล เลขที่ใบเสร็จรับเงิน คือ 200889 และวันที่ออกใบเสร็จ คือ 06/03/2001 ทำได้ดังนี้
INSERT INTO BILL (BILL_NO, BILL_DATE)
VALUES (200889, 06/03/2001);
ผลจากคำสั่งดังกล่าว จะทำให้สดมภ์ BILL_NO มีค่า 200889 สดมภ์ BILL_DATE มีค่า 06/03/2001 บรรจุอยู่
BILL_NO |
BILL_DATE |
200889 |
06/03/2001 |
- การป้อนข้อมูลลงในตาราง DETAIL
หากต้องการป้อนข้อมูล เลขที่ใบเสร็จรับเงิน คือ 200889 รหัสสินค้า คือ E-003 และจำนวนที่ขาย คือ 1 ทำได้ดังนี้
INSERT INTO GOOD (BILL_NO, GOOD_NO, AMT_SALE)
VALUES (E-003, E-003, 1);
ผลจากคำสั่งดังกล่าว จะทำให้สดมภ์ BILL_NO มีค่า 200889 สดมภ์ GOOD_NO มีค่า E-003 และสดมภ์ SALE_NO มีค่า 1002 บรรจุอยู่
BILL_NO |
GOOD_NO |
AMT_SALE |
200889 |
E-003 |
1 |
เพื่อเป็นข้อมูลประกอบการเรียกค้นข้อมูลจากตารางข้อมูลในหัวข้อถัดไป ในที่นี้ขอกำหนดตัวอย่าง ข้อมูลในแต่ละตาราง ดังนี้
ตาราง SALES_ORG
SALE_NO |
SALE_NAME |
SALE_ADD |
SALE_TEL |
1001 |
KIDSIRI |
BANGKOK |
028585075 |
1002 |
KIDPHAN |
SAMUTPRAKARN |
027298126 |
1003 |
NAMTHAI |
NAKORNPRATHOM |
034281105 |
1004 |
SAITIP |
NONTHABURI |
024471139 |
1005 |
RAKRAE |
NONTHABURI |
028793991 |
ตาราง GOOD
GOOD_NO |
GOOD _NAME |
STOCK |
SALE_PRI |
REORD_PT |
SALE_NO |
E-003 |
VIDEO |
50 |
5500 |
20 |
1002 |
E-004 |
TELEVISION |
80 |
4780 |
30 |
1002 |
J-011 |
ORANGE-JUICE |
200 |
720 |
200 |
1004 |
J-014 |
GRAPE-JUICE |
180 |
720 |
200 |
1004 |
K-008 |
TABLE |
25 |
800 |
10 |
1001 |
ตาราง BILL
BILL_NO |
BILL_DATE |
200889 |
06/03/2001 |
200890 |
06/03/2001 |
200891 |
06/03/2001 |
200893 |
06/04/2001 |
200895 |
06/04/2001 |
ตาราง DETAIL
BILL_NO |
GOOD_NO |
AMT_SALE |
200889 |
E-003 |
1 |
200889 |
E-004 |
1 |
200889 |
K-008 |
1 |
200893 |
J-011 |
3 |
200895 |
J-014 |
3 |
เมื่อทำการป้อนข้อมูลลงในตารางจากรีเลชันต่าง ๆ แล้ว ขั้นตอนนี้จะเป็นการค้นหาข้อมูลจากตารางข้อมูล โดยในที่นี้ขอเสนอตัวอย่างการค้นหาข้อมูลจากตารางทั้ง 4 จากข้อ 1 และข้อ 2 คือ SALES_ORG GOOD BILL และ DETAIL จำนวน 5 กรณี คือ
ต้องการทราบว่า สินค้าชนิดใดมีราคาขายต่อหน่วยเท่าใด สามารถทำได้ดังนี้
SELECT GOOD_NO, GOOD_NAME, SALE_PRI
FROM GOOD;
ผลจากคำสั่งดังกล่าว คือ
GOOD_NO |
GOOD _NAME |
SALE_PRI |
E-003 |
VIDEO |
5500 |
E-004 |
TELEVISION |
4780 |
J-011 |
ORANGE-JUICE |
720 |
J-014 |
GRAPE-JUICE |
720 |
K-008 |
TABLE |
800 |
ต้องการทราบหมายเลขโทรศัพท์ของบริษัทขายส่งที่อยู่ในจังหวัดนนทบุรี สามารถทำได้ดังนี้
SELECT SALE_NAME, SALE_ADD, SALE_TEL
FROM SALE;
ผลจากคำสั่งดังกล่าว คือ
SALE_NO |
SALE_NAME |
SALE_ADD |
SALE_TEL |
1004 |
SAITIP |
NONTHABURI |
024471139 |
1005 |
RAKRAE |
NONTHABURI |
028793991 |
ต้องการทราบว่า สินค้าชนิดใดมีปริมาณต่ำกว่าหรือเท่ากับจุดสั่งซื้อ และสินค้าดังกล่าวส่งมาจากบริษัทขายส่งใด
SELECT GOOD.GOOD_NO, GOOD.GOOD_NAME, GOOD.STOCK,
GOOD.REORD_PT, SALE_ORG.SALE_NAME, SALE_ORG.SALE_TEL
FROM GOOD, SALE_ORG
WHERE GOOD.STOCK <= GOOD.REORD_PT
AND GOOD.SALE_NO = SALE_ORG.SALE_NO;
ผลจากคำสั่งดังกล่าว คือ
GOOD_NO |
GOOD _NAME |
STOCK |
REORD_PT |
SALE_NAME |
SALE_TEL |
J-011 |
ORANGE-JUICE |
200 |
200 |
SAITIP |
024471139 |
J-014 |
GRAPE-JUICE |
180 |
200 |
SAITIP |
024471139 |
ต้องการทราบรายการสินค้าที่จำหน่ายตามใบเสร็จรับเงินเลขที่ 200889 สามารถทำได้ดังนี้
SELECT BILL.BILL_NO, BILL.BILLDATE, DETAIL.GOOD_NO, GOOD.GOOD_NAME,
DETAIL.AMT_SALE, GOOD.SALE_PRI * DETAIL.AMT_SALE
FROM BILL, DETAIL, GOOD
WHERE BILL.BILL_NO = 200889
AND BILL.BILL_NO = DETAIL.BILL_NO
AND DETAIL.GOOD_NO = GOOD.GOOD_NO;
ผลจากคำสั่งดังกล่าว คือ
BILL_NO |
BILL_DATE |
GOOD_NO |
GOOD _NAME |
AMT_SALE |
EXPRESSION |
200889 |
06/03/2001 |
E-003 |
VIDEO |
1 |
5500 |
200889 |
06/03/2001 |
E-004 |
TELEVISION |
1 |
4780 |
200889 |
06/03/2001 |
K-008 |
TABLE |
1 |
800 |
ต้องการทราบยอดขายจากการจำหน่ายสินค้าในวันที่ 06/04/2001 สามารถทำได้ดังนี้
SELECT SUM(GOOD.SALE_PRI * DETAIL.AMT_SALE)
FROM BILL, DETAIL, GOOD
WHERE BILL.BILL_DATE = 06/04/2001
AND BILL.BILL_NO = DETAIL.BILL_NO
AND DETAIL.GOOD_NO = GOOD.GOOD_NO;
ผลจากคำสั่งดังกล่าว คือ
SUM(GOOD.SALE_PRI * DETAIL.AMT_SALE) |
4320 |
ทั้งนี้ ที่กล่าวมาข้างต้นเป็นเพียงการนำเสนอตัวอย่างของการใช้ภาษาเอสคิวแอลกับฐานข้อมูลเพียงบางกรณีและบางประเด็นเท่านั้น หากต้องการทราบรายละเอียดและการใช้งานเพิ่มเติมอาจทำการศึกษา รายละเอียดได้จากบทก่อนหน้านี้