Back to Home

DataBase System

Lesson1234569101112131415

Lesson 7 : Database Management Application



Lesson Plan
Section No.
Section 1
Section 2
Test
PDF file
PPT File


<<Prev pageCourse MapNext page>>

Print content of this page
Save content of this page

 

การใช้ภาษาเอสคิวแอลกับฐานข้อมูล

จากโครงร่างฐานข้อมูลเชิงสัมพันธ์ของระบบฐานข้อมูลงานซื้อขายสินค้าในซุปเปอร์สโตร์ในเรื่องที่ 7.2.2 ข้างต้น หากใช้ภาษาเอสคิวแอลเพื่อดำกนินการกับฐานข้อมูลจะประกอบด้วยขั้นตอนดังนี้

1. การสร้างฐานข้อมูลและตาราง

ขั้นตอนนี้เป็นการสร้างฐานข้อมูลและนำรีเลชันต่าง ๆ ที่ได้ทำการออกแบบไว้แล้วในเรื่องที่ 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));

2. การป้อนข้อมูลลงในตารางข้อมูล

เมื่อได้ทำการสร้างตารางจากรีเลชันต่าง ๆ เรียบร้อยแล้ว ขั้นตอนนี้จะเป็นการป้อนข้อมูลลงใน ตารางข้อมูลทีละทูเพิล โดยในที่นี้ขอเสนอเฉพาะตัวอย่างการป้อนข้อมูลลงในตารางทั้ง 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

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

ทั้งนี้ ที่กล่าวมาข้างต้นเป็นเพียงการนำเสนอตัวอย่างของการใช้ภาษาเอสคิวแอลกับฐานข้อมูลเพียงบางกรณีและบางประเด็นเท่านั้น หากต้องการทราบรายละเอียดและการใช้งานเพิ่มเติมอาจทำการศึกษา รายละเอียดได้จากบทก่อนหน้านี้

 

 

Last Updated: 12/13/2001 11:22:07 AM
© โครงการเครือข่ายสารสนเทศเพื่อพัฒนาการศึกษา ทบวงมหาวิทยาลัย