วันจันทร์ที่ 12 กันยายน พ.ศ. 2559

กลุ่มคําสั่ง Data Manipulation language (dml)

(Data Manipulation Language-DML)

เมื่อมีการสร้างรีเลชันต่างๆในฐานข้อมูลเชิงสัมพันธ์โดยใช้ภาษา DDL แล้ว หากต้องการเรียกข้อมูลมาใช้หรือมีการเพิ่มเติมข้อมูลต่างๆซึ่ง SQL ที่เป็น DML ที่มีอยู่ใน DBMS ประกอบด้วย 4 คำสั่ง คือ 


คำสั่ง
ความหมาย
SELECTเรียกข้อมูลในตาราง
INSERTเพิ่มแถวข้อมูลลงไปในตาราง
UPDATEปรับปรุงแถวข้อมูลในตาราง
DELETEลบแถวข้อมูลในตาราง

คำสั่งเรียกค้นข้อมูล (SELECT ) 
คำสั่ง SELECT เป็นคำสั่งการเรียกดูข้อมูล หรือค้นหาข้อมูล ตามเงื่อนไขที่เราระบุ รูปแบบ SELECT ที่เขียนได้ง่ายที่สุด ประกอบด้วยส่วนประกอบหลักของคำสั่ง 3 ส่วน คือ
รูปแบบ

SELECT < ชื่อคอลัมน์ที่ต้องการดูข้อมูล >
FROM < ชื่อตาราง >
WHERE < เงื่อนไขตามที่ระบุ >
ตัวอย่าง มีข้อมูลตามตาราง GOODS (สินค้า)
PID
PNAME
AMOUNT
USED
111
shirt
52
10
112
pants
23
15
113
shorts
45
32
114
shoes
62
55
ถ้าต้องการแสดงข้อมูลเฉพาะชื่อสินค้า ( PNAME) และจำนวนสินค้าที่ใช้ไป ( USED ) สามารถใช้คำสั่ง
SELECT PNAME, USED
FROM GOODS;
ผลลัพธ์
PNAME
USED
shirt
10
pants
15
shorts
32
shoes
55

โอเปอเรเตอร์
การเรียกค้นข้อมูลอย่างมีเงื่อนไขตามหลักของภาษา SQL จะอยู่หลังคำสั่ง WHERE ซึ่งสามารถเปรียบเทียบตามโอเปอเรเตอร์ ในภาษา SQL อาจแบ่งโอเปอเรเตอร์ ได้เป็น 4 กลุ่ม คือ
1. โอเปอเรเตอร์คณิตศาสตร์(Arithmetic Operators)
2. โอเปอเรเตอร์เปรียบเทียบ(Comparison Operators)
3. โอเปอเรเตอร์ตรรกะ(Logical Operators)

1. โอเปอเรเตอร์คณิตศาสตร์(Arithmetic Operators) ได้แก่ operators ที่เป็น plus (+) minus (-), divide (/), multiply (*)
- โอเปอเรเตอร์ Plus (+) เป็นคำสั่งที่ใช้รวมค่า 2 ค่าเข้าด้วยกัน ดังตัวอย่างต่อไปนี้
ตัวอย่าง จากตาราง GOODS ถ้าต้องการเพิ่มจำนวนสินค้าแต่ละอย่างอีก 10 โดยให้ชื่อคอลัมน์ใหม่ว่า RAMOUNTจะใช้คำสั่งดังนี้

SELECT PID, PNAME, AMOUNT, (AMOUNT + 10) As RAMOUNT
FROM GOODS;
ผลลัพธ์
PID
PNAME
AMOUNT
RMOUNT
111
shirt
52
62
112
pants
23
33
113
shorts
45
55
114
shoes
62
72
หมายเหตุ ผลลัพธ์ที่ได้จะแสดงเพียงชั่วคราวที่หน้าจอเท่านั้น โดยไม่มีผลต่อข้อมูลของคอลัมน์ AMOUNTในตาราง GOODS
โอเปอร์เรเตอร์ Minus (-) คำสั่ง Minus คือ การนำข้อมูลของคอลัมน์หนึ่งไปลบออกจากข้อมูลของอีกคอลัมน์หนึ่ง
ตัวอย่าง ถ้าต้องการนำคอลัมน์ AMOUNT ลบออกจากคอลัมน์ USED แล้วนำผลลัพธ์ที่ได้แสดงในคอลัมน์ BALANCE โดยใช้คำสั่งดังนี้

SELECT PID, PNAME, (AMOUNT - USED ) As BALANCE
FROM GOODS;
ผลลัพธ์
PID
PNAME
BALANCE
111
shirt
42
112
pants
8
113
shorts
13
114
shoes
7

โอเปอร์เรเตอร์ Divide (/) เป็นคำสั่งที่ใช้ในการหารข้อมูลดังตัวอย่าง เช่น 
ต้องการหารคอลัมน์AMOUNT ด้วย 2 สามารถใช้คำสั่ง

SELECT PID, PNAME, (AMOUNT/2) as DIVIDE
FROM GOODS;
ผลลัพธ์
PID
PNAME
DEVIDE
111
shirt
26
112
pants
11.5
113
shorts
22.5
114
shoes
31

- โอเปอร์เรเตอร์ Multiply (*) เป็นคำสั่งที่ใช้ในคูณค่าของข้อมูลในคอลัมน์
ตัวอย่าง ตาราง GOODS ถ้าต้องการคูณคอลัมน์ AMOUNT ด้วย 2 ให้ได้ผลลัพธ์เป็นข้อมูลในคอลัมน์ใหม่ที่ชื่อ MULTIPLE จะใช้คำสั่งดังนี้

SELECT PID, PNAME, (AMOUNT*2) as MULTIPLE
FROM GOODS;

ผลลัพธ์

PID
PNAME
DEVIDE
111
shirt
104
112
pants
46
113
shorts
90
114
shoes
124

2. โอเปอรเรเตอร์เปรียบเทียบ (Comparison Operators เป็น Operator ที่จะให้ค่าออกมา 3 ค่า คือ ถูก (TRUE) ผิด (FALSE) ไม่รู้ (Unknow) การไม่รู้หมายถึง ถ้านำข้อมูลที่มีค่าไปเปรียบเทียบกับข้อมูลที่เป็น NULL ตัวเปรียบเทียบจะให้ค่าไม่รู้
ตัวอย่าง ในตาราง STUDENT

SID
SNAME
SCORE
211
SUDA
86
212
WANCHAI
213
APICHART
79
214
SOMJAI
92
ตัวอย่าง ถ้าต้องการดูว่า SNAME ที่ไม่มีค่า SCORE หรือค่า SCORE เป็นค่าว่างจะใช้คำสั่งดังนี้
SELECT *
FROM STUDENT
WHERE SCORE
 IS NULL;
หรือ
SELECT *
FROM STUDENT
WHERE SCORE = NULL;
ผลลัพธ์
SID
SNAME
SCORE
212
WANCHAI
คำว่า IS NULL เป็นเงื่อนไขหนึ่งที่สามารถใช้ใน WHERE ได้ เป็นการตรวจสอบว่ามีแถวข้อมูลใดที่มีคอลัมน์ SCORE เป็นค่าว่าง ( NULL ) บ้าง ให้แสดงเฉพาะ SNAME ที่ระบุใน SELECT ออกมา
ถ้าใช้คำสั่งว่า IS NOT NULL จะหมายความว่าแถวข้อมูลใดที่มี SCORE ไม่เป็นค่าว่าง ให้แสดง SNAME ในแถวข้อมูลนั้นออกมา


3 โอเปอรเรเตอร์ตรรกะ (Logical Operator) เป็นตัวโอเปอเรเตอร์ที่ใช้ในการเปรียบเทียบ เชื่อมโยงค่า 2 ค่า
- ตัวโอเปอเรเตอร์ AND เป็นตัวโอเปอเรเตอร์ ที่ใช้เชื่อมโยงค่า 2 ค่า โดยถ้าทั้งสองค่ามีค่าเป็นจรืงแล้วจะให้ค่าจริงออกมา แต่ถ้าค่าใดค่าหนึ่งเป็นเท็จแล้วจะให้ค่าเป็นเท็จ

ตัวอย่าง จากตาราง STUDENT 
SID
SNAME
MID
FINAL
211
SUDA
42
86
212
WANCHAI
53
213
APICHART
12
79
214
SOMJAI
95
92
ถ้าต้องการหาว่ามีนักเรียนคนใดที่มีคะแนนมิดเทอมและไฟนอลมากกว่า 50 จะใช้คำสั่ง ดังนี้

SELECT SNAME
FROM STUDENT
WHERE MID>=50 AND FINAL>=50;
ผลลัพธ์
SNAME
SOMJAI
ตัวโอเปอเรเตอร์ OR ใช้ในการเปรียบเทียบถ้าสิ่งที่นำมาเปรียบเทียบสิ่งใดสิ่งหนึ่งเป็นจริง จะได้ผลลัพธ์ออกมาเป็นจริง

SELECT SNAME
FROM STUDENT
WHERE MID>=50 OR FINAL>=50;
ผลลัพธ์
SNAME
SUDA
WANCHAI
APICHART
SOMJAI
- ตัวโอเปอเรเตอร์ BETWEEN…AND… เป็นโอเปอเรเตอร์ที่กำหนดเงื่อนไขของแอททริบิวท์ ซึ่งค่าสองที่อยู่ระหว่างคำสั่ง BETWEEN…AND…นั้นจะมีความหมายว่าเท่ากับหรือมากกว่าและเท่ากับหรือน้อยกว่า
SELECT SNAME
FROM STUDENT
WHERE MID>50 AND MID< 90;

ผลลัพธ์
SNAME
WANCHAI
ถ้าใช้คำสั่ง BETWEEN จะเป็นดังน
ี้
SELECT SNAME
FROM STUDENT
WHERE MID BETWEEN 50 AND 90;
 
ผลลัพธ์
SNAME
WANCHAI


- โอเปอร์เรเตอร์ IN เป็นการกำหนดเซ็ตของสิ่งที่ต้องการค้นหา โดยการใช้กับเงื่อนไขคอลัมน์ที่ต้องการระบุเงื่อนไขเป็นกลุ่มของข้อมูลโดยโอเปอเรเตอร์ IN จะแสดงต่อท้ายชื่อแอททริบิวท์ที่ถูกระบุเป็นเงื่อนไข และกลุ่มของข้อมูลที่เป็นข้อมูลเฉพาะของแอททริบิวท์ที่เป็นเงื่อนไขนี้ จะอยู่ในวงเล็บ ( ) และมีเครื่องหมาย , คั่น
ตัวอย่าง ตาราง STUDENT



SID
SNAME
PROGRAM
211
SUDA
COMPUTER
212
WANCHAI
BUSINESS
213
APICHART
SCIENCE
214
SOMJAI
COMPUTER
SELECT *
FROM STUDENT
WHERE PROGRAM= 'BUSINESS'
OR PROGRAM = 'SCIENCE';
ผลลัพธ์
SID
SNAME
PROGRAM
212
WANCHAI
BUSINESS
213
APICHART
SCIENCE
SELECT *
FROM STUDENT
WHERE PROGRAM IN ('BUSINESS ', 'SCIENCE ');

ผลลัพธ์
SID
SNAME
PROGRAM
212
WANCHAI
BUSINESS
213
APICHART
SCIENCE

ฟังก์ชัน
ฟังก์ชันที่ใช้ในภาษา SQLเป็นฟังก์ชัน ซึ่งเก็บประจำไว้กับภาษา SQL คือ

AVG เป็นคำสั่งการหาค่าเฉลี่ยของข้อมูลในคอลัมน์ใดคอลัมน์หนึ่งโดยในคอลัมน์ที่ไม่มีค่าใดบรรจุอยู่ (NULL VALUE)จะไม่นำมาบรรจุอยู่ในการคำนวณ การใช้ฟั่งก์ชั่น AVG จะนำค่าทุกตัวในคอลัมน์มาคำนวณรวมทั้งตัวที่มีค่าซ้ำกันด้วย
COUNT เป็นคำสั่งที่สามารถนับจำนวนของแถวหรือคอลัมน์
MAX เป็นคำสั่งในการหาค่าสูงสุดของข้อมูลของคอลัมน์ใดคอลัมน์หนึ่ง การใช้ MAX กับประเภทของข้อมูลที่เป็นตัวอักขระ ผลของคำสั่งจากคำสั่งจะทำการหาชื่อของผู้ที่มีอักษร (A-Z) ตามลำดับใครที่มีอักษรลำดับมากที่สุดจะถูกแสดงออกมาเพียงแถวเดียว
MIN เป็นคำสั่งในการหาค่าต่ำสุดของข้อมูลของคอลัมน์ใดคอลัมน์หนึ่ง การใช้ MIN กับประเภทของข้อมูลที่เป็นตัวอักขระ ผลของคำสั่งจากคำสั่งจะทำการหาชื่อของผู้ที่มีอักษร (A-Z) ตามลำดับใครที่มีอักษรลำดับน้อยที่สุดจะถูกแสดงออกมาเพียงแถวเดียว
SUM เป็นคำสั่งการหาผลรวมของคอลัมน์ใดคอลัมน์หนึ่ง SUM จะใช้กับตัวเลขเท่านั้น ถ้าใช้ SUM กับตัวอักษรจะเกิด ERROR

ตัวอย่าง ตาราง STUDENT
SID
SNAME
SCORE
211
SUDA
86
212
WANCHAI
82
213
APICHART
79
214
SOMJAI
92
SELECT MAX(SCORE),MIN(SCORE)
FROM STUDENT;
ผลลัพธ์
92 และ 79

ตัวอย่าง
SELECT AVG(SCORE)
FROM STUDENT;
ผลลัพธ์
84.75


การเรียกดูข้อมูลจากหลายตาราง
คำสั่ง SELECT สามารถใช้ในการเรียกดูข้อมูลหรือเชื่อมโยงข้อมูลจากตารางมากกว่า 1 ตารางหรือที่เรียกว่า JOIN

ตัวอย่าง ตาราง GOODS
PID
PNAME
AMOUNT
USED
111
shirt
52
10
112
pants
23
15
113
shorts
45
32
114
shoes
62
55
ตาราง SALES
SID
SNAME
PID
S01
SUDA
111
S02
WANCHAI
112
S03
APICHART
113
S04
SOMJAI
114
หมายเหตุ PID ในตาราง SALESเป็นคีย์นอกหรือ Foreign Key ที่เชื่อมกับตาราง GOODS
สมมุติว่าเราต้องการแสดงชื่อsale ที่รับผิดชอบสินค้าประเภทpants และดูปริมาณสินค้าที่ใช้ไป เราสามารถใช้คำสั่ง

SELECT SNAME, USED
FROM GOODS,SALES
WHERE GOODS.PID = SALES.PID
AND PID = 112;

พิจารณาเงื่อนไขที่อยู่หลัง WHERE พบว่ามี 2 เงื่อนไข คือ
OODS.PID = SALES.PID เนื่องจากทั้งตาราง GOODS และตารางSALESมีชื่อคอลัมน์PID จะเขียนเหมือนกัน ดังนั้นเพื่อให้เกิดความแตกต่างระหว่างชื่อคอลัมน์PIDทั้งสอง จึงมีการเติมชื่อตารางลงไปข้างหน้าชื่อคอลัมน์PIDของแต่ละคอลัมน์ เพื่อให้ทราบว่าPIDนี้เป็นคอลัมน์ที่อยู่ในตารางใด
PID = 112เป็นคำสั่งที่กำหนดเงื่อนไขให้แสดงข้อมูลเฉพาะ GODS ซึ่งมีค่า PID = 112


ผลลัพธ์
SNAME
USED
WANCHAI
15

การเรียกดูแบบซ้อนกัน ( Subqueries ) 
เป็นการนำประโยคการเรียกดูข้อมูลใส่อยู่ภายใต้ประโยค ซึ่งมีรูปแบบดังนี้

รูปแบบ
SELECT < ชื่อคอลัมน์ >
FROM < ชื่อตาราง >
WHERE < ชื่อคอลัมน์ > IN

SELECT < ชื่อคอลัมน์ >
FROM < ชื่อตาราง >
WHERE < ชื่อคอลัมน์ > );
ตัวอย่าง ต้องการแสดงชื่อ sale ทรับผิดชอบวินค้าประเภท pants สามารถใช้คำสั่ง
SELECT SNAME
FROM SALES
WHERE PID IN

SELECT PID
FROM GOODS
WHERE PNAME = 'pants' );
จากตัวอย่างข้างต้น คำสั่งการเรียกดูข้อมูลคำสั่งในสุด ( ในวงเล็บ ) จะมีการทำงานก่อน
ผลลัพธ์
SNAME
WANCHAI


คำสั่งเพิ่มแถวข้อมูล ( INSERT ) 
การใช้คำสั่ง INSERTมีการเพิ่มข้อมูลทีละแถวโดยระบุค่าข้อมูลของแต่ละคอลัมน์ลงไปในคำสั่ง INSERT โดยตรง และแบบที่มีการใช้คำสั่งค้นหาข้อมูล ( SELECT ) เพื่อดึงกลุ่มข้อมูลซึ่งมีหลายแถว ส่งให้กับคำสั่ง INSERT ทำการเพิ่มข้อมูลลงไปในตาราง

รูปแบบ
INSERT INTO < ชื่อตารางที่จะเพิ่มข้อมูล >
VALUES < ค่าข้อมูลของแต่ละคอลัมน์ >
ตัวอย่าง ตาราง sales
SID
SNAME
PID
S01
SUDA
111
S02
WANCHAI
112
S03
APICHART
113
S04
SOMJAI
114
ถ้าต้องการเพิ่ม sale คนใหม่ให้ร่วมรับผิดชอบสินค้าประเภท pants สามารถใช้คำสั่ง
INSERT INTO SALES
VALUES ( S05, " SUDA" , 112);
ผลลัพธ์
SID
SNAME
PID
S01
SUDA
111
S02
WANCHAI
112
S03
APICHART
113
S04
SOMJAI
114
S05
SUDA
112
ตัวอย่าง ถ้าต้องการจะใส่ข้อมูลบางคอลัมน์ ใช้คำสั่งดังนี้
INSERT INTO SALES(SID,SNAME)
VALUES ( 'S06','Arlee');
ผลลัพธ์
SID
SNAME
PID
S01
SUDA
111
S02
WANCHAI
112
S03
APICHART
113
S04
SOMJAI
114
S05
SUDA
112
S06
ARLEE
จะเห็นว่าไม่ได้ใส่ค่าในคอลัมน ์PID ไว้ ดังนั้นคอลัมน์นี้จะมีค่าเป็น NULL โดยอัตโนมัติ

คำสั่งปรับปรุงแถวข้อมูล ( UPDATE ) 
เป็นการปรับปรุงหรือแก้ไขค่าคอลัมน์ซึ่งอาจมีมากกว่า 1 คอลัมน์ในแถวทุกแถวที่มีเงื่อนไขสอดคล้องกับที่ระบุไว้หลังคำว่า WHERE

รูปแบบ
UPDATE < ชื่อตารางที่ต้องการปรับปรุง >
SET < ชื่อคอลัมน์ > = < ค่าข้อมูล >
WHERE < เงื่อนไขตามที่ระบุ >
ตัวอย่าง ถ้าต้องการเปลี่ยนค่า PID ของsale รหัส S03 ในตาราง SALES ให้เป็น 114 จะต้องป้อนคำสั่งดังนี้

UPDATE SALES
SET PID = 114
WHERE SID = S03;
ผลลัพธ์
SID
SNAME
PID
S01
SUDA
111
S02
WANCHAI
112
S03
APICHART
114
S04
SOMJAI
114
S05
SUDA
112
S06
ARLEE
คำสั่งลบแถวข้อมูล ( DELETE )
ใช้ในการลบแถวข้อมูล ซึ่งจะเป็นคำสั่งให้มีการลบแถวข้อมูลทุกแถวที่มีเงื่อนไขสอดคล้องกับที่ระบุไว้หลังคำว่า WHERE

รูปแบบ 

DELETE FROM < ชื่อตารางที่ระบุ >
WHERE < เงื่อนไขตามที่ระบุ >
ตัวอย่าง
DELETE FROM SALES
WHERE SID = S03;
ผลลัพธ์
SID
SNAME
PID
S01
SUDA
111
S02
WANCHAI
112
S04
SOMJAI
114
S05
SUDA
112
S06
ARLEE

ไม่มีความคิดเห็น:

แสดงความคิดเห็น