SA D 7

Insert YouTube videos in PowerPont slides with aS Desktop
Views:
 
Category: Entertainment
     
 

Presentation Description

No description available.

Comments

Presentation Transcript

Structured Query Language IISQL2(SA&D-7) : 

1 Structured Query Language IISQL2(SA&D-7)

Structured Query Language:SQL II : 

2 Structured Query Language:SQL II การใช้ฟังก์ชันใน SQL ในภาษา SQL ประกอบด้วยฟังก์ชันการคำนวณทางสถิติที่จะช่วยประมวลผลในการคำนวณหาค่าจากกลุ่มแถวของข้อมูลในคอลัมน์ที่ต้องการ ฟังก์ชันเหล่านี้จะใช้ร่วมกับคำสั่ง SELECT ผลลัพธ์ของฟังก์ชันการคำนวณคือข้อสรุปของข้อมูลในกลุ่มแถวของข้อมูลที่ถูกระบุดังนี้ ตารางที่ 7.1 สรุปฟังก์ชันทางสถิติในภาษา SQL

Structured Query Language:SQL II : 

3 Structured Query Language:SQL II การใช้ฟังกชัน COUNT() ฟังก์ชัน COUNT() จะใช้ในการนับจำนวนแถวของข้อมูล ฟังก์ชันนี้ใช้ร่วมกับประโยค SELECT รูปแบบคือให้มี COUNT แล้วอาจตามด้วย DISTINCT แล้วตามด้วยชื่อคอลัมน์ที่ต้องการ ถ้ามีการใช้คำว่า DISTINCT จะเลือกนับเพิ่มเฉพาะข้อมูลที่แตกต่างกันคือถ้าข้อมูลซ้ำกันจะไม่นับข้อมูลเพิ่ม COUNT ([DISTINCT] <ชื่อคอลัมน์>) ตัวอย่างที่ 1 ต้องการนับดูว่ามีข้อมูลของนักศึกษาทั้งหมดกี่แถวในตาราง STUDENT SELECT COUNT(*) FROM STUDENT ผลการทำงานคำสั่งนี้คือ 8

Structured Query Language:SQL II : 

4 Structured Query Language:SQL II ตัวอย่างที่ 2 ต้องการนับดูว่าสาขาวิชาที่แตกต่างกันมีกี่สาขา SELECT COUNT (DISTINCT Major) FROM STUDENT ผลการทำงานของคำสั่งคือ 3 เนื่องจากมีการใช้คำว่า DISTINCT จะเลือกนับเฉพาะสาขาวิชาที่แตกต่างกัน การจัดกลุ่มแถวข้อมูลโดยใช้ GROUP BY ในบางกรณีอาจมีความจำเป็นที่จะต้องแบ่งข้อมูลออกเป็นกลุ่ม ๆเช่นการจัดกลุ่มของนักศึกษาจากตาราง STUDENT ตามสาขาวิชาเอก ซึ่งจะจัดได้เป็น 3 กลุ่มคือ สาขาวิชาเอก HISTORY, ACCOUNTING และ MATH ในภาษา SQL จะใช้ประโยค GROUP BY ในคำสั่ง SELECT เพื่อจัดกลุ่มแถวของข้อมูลที่มีในคอลัมน์ที่ถูกระบุไว้หลังคำสั่ง GROUP BY

Structured Query Language:SQL II : 

5 Structured Query Language:SQL II SELECT <ชื่อคอลัมน์> FROM <ชื่อตาราง> [WHERE <เงื่อนไข>] [GROUP BY <ชื่อคอลัมน์ทีใช้ในการจัดกลุ่มแถวข้อมูล>] [ORDER BY <ชื่อคอลัมน์หรือกลุ่มคอลัมน์ที่ใช้ในการจัดเรียงข้อมูล>] การใช้ประโยค GROUP BY จะต้องปรากฏชื่อคอลัมน์ที่เป็นเงื่อนไขของการจัดกลุ่มแถวข้อมูลไว้ที่คำสั่ง SELECT ด้วย หลังจากจัดกลุ่มแถวข้อมูลแล้วจะสามารถใช้ฟังก์ชันการคำนวณต่าง ๆ กับกลุ่มของแถวข้อมูลในตารางที่มีค่าภายใต้คอลัมน์ที่กำหนดเท่านั้น

Structured Query Language:SQL II : 

6 Structured Query Language:SQL II ตัวอย่างที่ 3 ต้องการแสดงจำนวนนักศึกษาจากตาราง STUDENT ในแต่ละวิชาเอก SELECT Major, COUNT(*) FROM STUDENT GROUP BY Major จากคำสั่งจะทำให้แถวของข้อมูลในตาราง STUDENT ถูกจัดกลุ่มตามสาขาวิชาเอก ซึ่งจัดได้เป็น 3 กลุ่ม หลังจากนั้นฟังก์ชัน COUNT จะทำการนับว่าในแต่ละกลุ่มมีข้อมูลกี่แถว ซึ่งจะได้ผลการทำงานของคำสั่ง ดังนี้

Structured Query Language:SQL II : 

7 Structured Query Language:SQL II จากคำสั่งจะทำให้แถวของข้อมูลในตาราง STUDENT ถูกจัดกลุ่มตามสาขาวิชาเอก ซึ่งจัดได้เป็น 3 กลุ่ม หลังจากนั้นฟังก์ชัน COUNT จำทำการนับว่าในแต่ละกลุ่มมีข้อมูลกี่แถว ซึ่งจะได้ผลการทำงานของคำสั่ง ดังนี้ จากตัวอย่างข้างต้น ถ้าต้องการให้แสดงผลการทำงานของคำสั่งเรียงตามลำดับชื่อสาขาวิชาเอก จะทำได้โดยการใช้ประโยค ORDER BY ร่วมด้วย

Structured Query Language:SQL II : 

8 Structured Query Language:SQL II SELECT Major, COUNT(*) FROM STUDENT GROUP BY Major ORDER BY Major ประโยค ORDER BY จะทำการเรียงผลการทำงานของคำสั่งตามลำดับชื่อสาขาวิชาเอก ซึ่งจะทำให้ผลการทำงานของคำสั่งข้างต้น ดังนี้

Structured Query Language:SQL II : 

9 Structured Query Language:SQL II การใช้ฟังกชัน SUM() ฟังก์ชัน SUM() ใช้เพื่อหาผลรวมของค่าที่เป็นตัวเลขในคอลัมน์ที่กำหนด รูปแบบของฟังก์ชัน SUM() คือ SUM ([DISTINCT] <นิพจน์ทางตรรกศาสตร์>) ตัวอย่างที่ 4 คำสั่งคำนวณหาโบนัสรวมกรณีให้เงินโบนัสเป็น 5% ของเงินเดือนแก่พนักงานในแผนก COMPUTER SELECT SUM (Salary*0.05) FROM EMPLOYEE WHERE dept=‘COMPUTER’

Structured Query Language:SQL II : 

10 Structured Query Language:SQL II ตัวอย่างที่ 5 คำสั่งคำนวณเงินเดือนรวมแยกตามแผนก SELECT dept, SUM (Salary) FROM EMPLOYEE GROUP BY dept

Structured Query Language:SQL II : 

11 Structured Query Language:SQL II การใช้ฟังกชัน AVG() ฟังก์ชัน AVG() แสดงค่าเฉลี่ยของข้อมูลตัวเลขในคอลัมน์ที่กำหนด รูปแบบ คือ AVG ([DISTINCT] <นิพจน์ทางตรรกศาสตร์>) ตัวอย่างที่ 6 คำสั่งคำนวณเงินเดือนเฉลี่ยของแผน ACCOUNTING กับแผนก COMPUTER SELECT dept, AVG (Salary) FROM EMPLOYEE WHERE dept=‘COMPUTER’ OR dept = ‘ACCOUNTING’ GROUP BY dept

Structured Query Language:SQL II : 

12 Structured Query Language:SQL II การใช้ฟังกชัน MAX(), MIN() ฟังก์ชัน MAX(), MIN() ใช้เพื่อแสดงค่าสูงสุด ต่ำสุด ของคอลัมน์ที่กำหนด โดยพิจารณาเฉพาะค่าที่เป็นตัวเลขเท่านั้น รูปแบบของฟังก์ชัน MAX(), MIN() คื่อ MAX ([DISTINCT] <นิพจน์ทางตรรกศาสตร์>) MIN ([DISTINCT] <นิพจน์ทางตรรกศาสตร์>) ตัวอย่างที่ 7 คำสั่งให้แสดงค่าสูงสุด ค่าต่ำสุด และช่วงเงินเดือนของพนักงานแต่ละแผนก SELECT dept, MAX (Salary), MAX (Salary) – MAX (Salary) FROM EMPLOYEE ORDER BY dept

Structured Query Language:SQL II : 

13 Structured Query Language:SQL II การใช้ประโยค HAVING() ประโยค HAVING() ใช้ในกรณีที่ไม่ต้องการพิจารณาข้อมูลทุก ๆ กลุ่มคือต้องการระบุเฉพาะกลุ่มย่อยจากข้อมูลกลุ่มใหญ่ที่ถูกแบ่งโดยใช้ประโยค GROUP BY เช่นต้องการจัดกลุ่มนักศึกษาตามสาขาวิชาเอกแล้วต้องการเรียกดูเฉพาะกลุ่มที่มีนักศึกษาไม่เกิน 2 คนเท่านั้น ตัวอย่างที่ 8 คำสั่งให้แสดงชื่อสาขาวิชาเอกและจำนวนนักศึกษาของสาขาวิชาที่มีนักศึกษาไม่เกิน 2 คน SELECT Major, COUNT(*) FROM STUDENT GROUP BY Major ORDER BY COUNT(*)<=2

Structured Query Language:SQL II : 

14 Structured Query Language:SQL II คำสั่ง HAVING() จะมีลักษณะเช่นเดียวกับคำสั่ง WHERE คือจะต้องตามด้วยเงื่อนไข โดยที่ HAVING จะใช้เมื่อมีประโยค GROUP BY เพื่อใช้ในการจัดกลุ่มเท่านั้น ประโยค HAVING จะทำการตัดกลุ่มที่ไม่ต้องการออกไป ซึ่งจะทำให้ได้ผลการทำงานของคำสั่งคือ ตัวอย่างที่ 9 คำสั่งให้แสดงชื่อสาขาวิชาเอกและอายุเฉลี่ยของนักศึกษาที่อยู่ปี 4 เฉพาะสาขาวิชาเอกที่มีนักศึกษามากกว่า 1 คน SELECT Major, AVG (Age) FROM STUDENT WHERE GradeLevel=‘SN’ GROUP BY Major HAVING COUNT(*)>1

Structured Query Language:SQL II : 

15 Structured Query Language:SQL II ลำดับการทำงานของคำสั่งข้างต้นคือ จะทำงานตามประโยค WHERE ก่อนคือจะเลือกเฉพาะแถวข้อมูลของนักศึกษาชั้นปีที่ 4 (SN) แล้วจัดกลุ่มนักศึกษาเหล่านั้นตามสาขาวิชาเอก แล้วเลือกเฉพาะกลุ่มที่มีข้อมูลมากกว่า 1 แถว แล้วหาค่าเฉลี่ยของอายุนักศึกษาในกลุ่มนั้น ผลการทำงานของคำสั่ง สรุปรูปแบบของประโยคเรียกดู ข้อมูลที่มีการใช้ประโยค WHERE, GROUP BY, HAVING และ ORDER BY ดังนี้

Structured Query Language:SQL II : 

16 Structured Query Language:SQL II สรุปรูปแบบของประโยคเรียกดู ข้อมูลที่มีการใช้ประโยค WHERE, GROUP BY, HAVING และ ORDER BY ดังนี้ SELECT <ชื่อคอลัมน์ที่ต้องการเรียกดู> FROM <ชื่อตาราง> [WHERE <เงื่อนไข>] [GROUP BY <ชื่อคอลัมน์ที่ใช้ในการจัดกลุ่มแถวข้อมูล>] [HAVING <เงื่อนไขที่ใช้ในการจัดกลุ่มแถว>] [ORDER BY <ชื่อคอลัมน์หรือกลุ่มคอลัมน์ที่ใช้ในการจัดเรียง ลำดับข้อมูล>]

Structured Query Language:SQL II : 

17 Structured Query Language:SQL II ประโยค WHERE จะใช้กำหนดเงื่อนไขให้กับข้อมูลเฉพาะบางแถวมากถูกจัดรวมอยู่ในกลุ่ม โดยจะมีการไปทำงานที่ WHERE ก่อนข้อมูลที่ตรงตามเงื่อนไขของ WHERE เท่านั้นที่จะนำมาถูกจัดกลุ่มโดยการ GROUP BY ประโยค GROUP BY ใช้แบ่งแถวข้อมูลออกเป็นกลุ่ม ๆ แล้วสามารถใช้ฟังก์ชันการคำนวณหลังจากการจัดกลุ่ม ประโยค HAVING จะใช้ในการกำหนดเงื่อนไขเพื่อเลือกเฉพาะกลุ่มที่ควรจะถูกส่งค่ากลับมาให้คำสั่ง SELECT โดยเงื่อนไขส่วนใหญ่ในประโยคจะมีการใช้ฟังก์ชันการคำนวณ ประโยค ORDER BY ในกรณีนี้จะใช้ในการกำหนดการจัดเรียงผลของแต่ละกลุ่มตามลำดับ

Structured Query Language:SQL II : 

18 Structured Query Language:SQL II การเชื่อมโยงข้อมูลจากหลาย ๆ ตาราง โดยปกติแล้วข้อมูลที่เกี่ยวข้องกับเรื่องต่าง ๆ จะเก็บอยู่ภายในตารางหลาย ๆ ตาราง ซึ่งเป็นผลจากกระบวนการนอร์มอลไลท์เซชัน ดังนั้นในบางกรณีสารสนเทศที่เราต้องการจะต้องได้มาจากการเชื่อมโยงข้อมูลจากหลาย ๆ ตาราง การเชื่อมโยงข้อมูลจากตารางหลาย ๆ ตารางทำได้โดย กำหนดชื่อตารางที่ต้องการนำมาเชื่อมโยงกันไว้ในประโยค FROM กำหนดเงื่อนไขที่ต้องการจะใช้ในการเชื่อมตารางเข้าด้วยกันไว้ในประโยค WHERE ในรูปแบบ SELECT <ชื่อคอลัมน์ที่ต้องการดูข้อมูล> FROM <ชื่อตาราง> WHERE <เงื่อนไข>

Structured Query Language:SQL II : 

19 Structured Query Language:SQL II กรณีการเชื่อมโยงข้อมูลจาก 2 ตาราง การกำหนดเงื่อนไขที่ใช้ในการเชื่อมตารางเข้าด้วยในประโยค WHERE มีรูปแบบคือ WHERE ชื่อตารางที่ 1.ชื่อคอลัมน์ เงื่อนไข ชื่อตารางที่ 2.ชื่อคอลัมน์ ตัวอย่างเงื่อนไขที่ใช้ในการเชื่อมตารางคือ การมีค่าเท่ากันของค่าในคอลัมน์ที่ใช้ในการเชื่อม 2 ตาราง ถ้าเราไม่ได้กำหนดเงื่อนไขไว้ในการเชื่อมตาราง ทุก ๆ แถว ในตารางแรกจะมาเชื่อมโยงกับทุก ๆ แถว ในตารางที่ 2 เรียกว่าการหา ผลคูณคาร์ทิเชียน (Cartesian Product) หมายถึงการจับคู่ข้อมูลทุกแถวในตารางเข้าด้วยกันเช่น พิจารณาข้อมูลของนักกีฬาของ Italy กับนักกีฬาของ France ดังนี้

Structured Query Language:SQL II : 

20 Structured Query Language:SQL II ตารางนักกีฬาของ Italy ตารางนักกีฬาของ France

Structured Query Language:SQL II : 

21 Structured Query Language:SQL II ตัวอย่างที่ 10 คำสั่งจับคู่นักกีฬาแต่ละคนของ Italy กับนักกีฬา ทุก ๆ คนของ France SELECT * FROM Italy, France

Structured Query Language:SQL II : 

22 Structured Query Language:SQL II กรณีการเชื่อมโยงข้อมูลจากตารางเดียวกันจะใช้วิธีการตั้งชื่อสมมติให้กับตารางนั้น 2 ชื่อ ดังตัวอย่าง ตัวอย่างที่ 11 คำสั่งการจัดให้นักกีฬาของประเทศ Italy แข่งกัน SELECT X.Player, X.Skill, X.Sex Y.Player, Y.Skill, Y.Sex FROM Itlay X, Italy Y WHERE X.Player != Y.Player

Structured Query Language:SQL II : 

23 Structured Query Language:SQL II ตัวอย่างที่ 12 ถ้าต้องการให้แสดง รหัสนักศึกษา ชื่อนักศึกษา และรหัสวิชา ของนักศึกษาแต่ละคน จะต้องทำการเชื่อมโยงข้อมูล STUDENT และตางราง ENROLLMENT เข้าด้วยกัน ดังนี้ SELECT STUDENT.SID, STUDENT.Name, ENROLLMENT.ClassName FROM STUDENT, ENROLLMENT WHERE STUDENT.SID = ENROLLMENT.StudentName ในประโยค FROM แสดงให้เห็นว่าจะมีการเชื่อมโยงตาราง STUDENT และตาราง ENROLLMENT แล้วจึงเลือกเฉพาะแถวข้อมูลโดยเงื่อนไขที่อยู่หลังประโยค WHERE คือแถวที่มีรหัสนักศึกษาจากตาราง STUDENT เท่ากับแถวที่มีรหัสนักศึกษาจากตาราง ENROLLMENT

Structured Query Language:SQL II : 

24 Structured Query Language:SQL II ผลการทำงานของคำสั่ง

Structured Query Language:SQL II : 

25 Structured Query Language:SQL II ตัวอย่างที่ 13 ต้องการแสดงเฉพาะรหัสนักศึกษาและรหัสวิชาของนักศึกษาชื่อ RUM เฉพาะวิชาที่เขาลงทะเบียนเป็นอันดับที่ 1 ในชั้นเรียน SELECT STUDENT.SID, ENROLLMENT.ClassName FROM STUDENT, ENROLLMENT WHERE STUDENT.SID = ENROLLMENT.StudentNumber AND STUDENT.Name = ‘RUM’ AND ENROLLMENT.PositionNumber = 1

Structured Query Language:SQL II : 

26 Structured Query Language:SQL II ตัวอย่างที่ 14 ตารางแสดงรหัสนักศึกษา รหัสวิชา เวลาเรียน และลำดับที่นักศึกษาลงทะเบียนของนักศึกษาที่ BIRD SELECT STUDENT.SID, CLASS.Name, CLASS.Time, ENROLLMENT.PositionNumber FROM STUDENT, ENROLLMENT, CLASS WHERE STUDENT.SID=ENROLLMENT.StudentNumber AND ENROLLMENT.ClassName = CLASS.Name AND STUDENT.Name = ‘BIRD’

Structured Query Language:SQL II : 

27 Structured Query Language:SQL II ผลการทำงานของคำสั่ง

Structured Query Language:SQL II : 

28 Structured Query Language:SQL II การสืบค้นข้อมูลแบบซ้อนกัน (Retrieval Using Subquery) ในการเรียกดูข้อมูลบางลักษณะที่มีความซ้บซ้อนมาก ๆ อาจจะต้องใช้คำสั่ง SELECT ซ้อนกัน ซึ่งทำได้โดยการซ้อนประโยค SELECT ที่ใช้เรียกดูข้อมูลไว้ในส่วนของประโยค WHERE โดยใช้ร่วมกับตัวกระทำเช่น IN, NOT IN, EXIST หรือเครื่องหมายการเปรียบเทียบค่าเช่น =, !=, >, >=, การทำงานของการมีคำสั่งเรียกดูข้อมูลซ้อนกันนี้จะเริ่มจากคำสั่งเรียกดูข้อมูลที่ซ้อนอยู่ภายในสุดออกมาสู่ภายนอก เราสามารถที่จะกำหนดให้มีคำสั่งเรียกดูข้อมูลซ้อนกันอยู่ได้หลาย ๆ ชั้น และสามารถที่จะซ้อนคำสั่งเรียกดูข้อมูลไว้กับคำสั่ง INSERT, UPDATE และ DELETE ได้ด้วย

Structured Query Language:SQL II : 

29 Structured Query Language:SQL II ตัวอย่างที่ 15 พิจารณาคำสั่งเพื่อดูว่ามีนักศึกษาคนใดบ้างที่ลงทะเบียนเรียนวิชา CS250 SELECT StudentNumber FROM ENROLLMENT WHERE ClassName = ‘CS250’ ผลการทำงานของคำสั่ง

Structured Query Language:SQL II : 

30 Structured Query Language:SQL II และเมื่อคำสั่ง SELECT ในลักษณะซ้อนกันดังนี้ SELECT Name FROM STUDENT WHERE SID IN (SELECT StudentNumber FROM ENROLLMENT WHERE ClassName = ‘CS250’)

Structured Query Language:SQL II : 

31 Structured Query Language:SQL II จะทำให้ได้ผลการทำงานคือการดูว่านักศึกษาที่ลงทะเบียนในวิชา CS250 มีชื่อว่าอะไร เนื่องจากการทำงานจะเริ่มทำงจากประโยค SELECT ประโยคในสุดก่อน คือจะค้นหารหัสของนักศึกษาที่ลงทะเบียนวิชา CS250 ก่อนแล้วจึงค้นหาชื่อของนักศึกษาที่มีรหัสที่ได้จากขั้นตอนแรกให้กับคำสั่งเรียกดูข้อมูลประโยคถัดมา จะได้ผลการทำงานของคำสั่งคือ

Structured Query Language:SQL II : 

32 Structured Query Language:SQL II ดังนั้นการใช้คำสั่ง SELECT ซ้อนกันตามตัวอย่างข้างต้นจึงมีความหมายเช่นเดียวกับการใช้คำสั่ง SELECT Name FROM STUDENT WHERE SID IN [41200, 41400] กรณีการเรียกดูข้อมูลซ้อนกันหลายชั้น ตัวอย่างที่ 16 ต้องการดูว่ามีนักศึกษาชื่ออะไรบ้างที่ลงทะเบียนเรียนในเวลา 8 โมงเช้าวันจันทร์ พุธ และศุกร์ นั่นคือมีค่าในคอลัมน์เวลาเรียนเป็น MWF8

Structured Query Language:SQL II : 

33 Structured Query Language:SQL II SELECT STUDENT.Name FROM STUDENT WHERE STUDENT.SID IN (SELECT ENROLLMENT.StudentNumber FROM ENROLLMENT WHERE ENROLLMENT.ClassName IN (SELECT CLASS.Name FROM CLASS WHERE CLASS.Time = ‘MWF18’))

Structured Query Language:SQL II : 

34 Structured Query Language:SQL II จากคำสั่งการเรียกค้นข้อมูลออกมาจาก 3 ตารางคือ CLASS, ENROLLMENT และ STUDENT ดังนี้ ขั้นแรกค้นรหัสวิชาที่มีเวลาเรียนคือ MWF8 ซึ่งหมายถึงเรียนตอน 8 โมง วันจันทร์ พุธ และศุกร์ จากตาราง CLASS ก่อนซึ่งจะได้ผลจากการทำงานของคำสั่งคือ BF410 แล้วส่งไปให้คำสั่ง SELECT ในลำดับถัดมาคือ การเรียกค้นรหัสนักศึกษาจากตาราง ENROLLMENT โดยเลือกเฉพาะนักศึกษาที่ลงทะเบียนในวิชา BF410 ซึ่งจะได้นักศึกาษาเพียงคนเดียวคือ นักศึกษารหัส 41400 ผลการทำงานของคำสั่งนี้จะส่งไปให้คำสั่ง SELECT ในลำดับนอกสุดคือการเรียกค้นชื่อนักศึกษาที่มีรหัสเป็น BF410 ซึ่งจะได้ผลการทำงานของคำสั่งดังนี้

Structured Query Language:SQL II : 

35 Structured Query Language:SQL II การเปรียบเทียบระหว่างการใช้วิธีการเชื่อมโยงข้อมูลระหว่างตารางและการใช้การสืบค้นข้อมูลแบบซ้อนกัน เราสามารถใช้วิธีการเชื่อมโยงข้อมูลระหว่างตารางแทนการสืบค้นข้อมูลแบบซ้อนกันได้ ตัวอย่างเช่น กรณีต้องการแสดงข้อมูลนักศึกษาที่ลงทะเบียนเรียนวิชา CS250 ซึ่งแสดงในตัวอย่างที่ 15 จะสามารถเขียนได้อีกรูปแบบหนึ่งโดยใช้วิธีการเชื่อมโยงข้อมูลระหว่างตาราง STUDENT และ ENROLLMENT โดยใช้คำสั่งรูปแบบ SELECT STUDENT.Name FROM STUDENT, ENROLLMENT WHERE STUDENT.SID = ENROLLMENT.StudentNumber AND ENROLLMENT.ClassName = ‘CS250’

Structured Query Language:SQL II : 

36 Structured Query Language:SQL II แต่ในกรณีที่ต้องการทั้งรหัสวิชาและชั้นปีของนักศึกษาที่ลงทะเบียนเรียนในวิชานั้น ๆ โดยสนใจเฉพาะนักศึกษาที่ไม่ใช่นักศึกษาในระดับปี 5 (GR) จะต้องใช้เชื่อมโยงข้อมูลระหว่างตารางเท่านั้น ไม่สามารถที่จะใช้การสืบค้นข้อมูลแบบซ้อนได้ เนื่องจากคำตอบที่ต้องการจะมาจาก 2 ตารางคือ รหัสวิชามาจากตาราง ENROLLMENT และชั้นปีจะมาจากตาราง STUDENT จึงจะต้องใช้คำสั่งดังตัวอย่างที่ 19 SELECT DISTINCT ENROLLMENT.ClassName, STUDENT.GradeLevel FROM STUDENT, ENROLLMENT WHERE ENROLLMENT.StudentNumber = STUDENT.SID AND STUDENT.GradeLevel NOT = ‘GR’

Structured Query Language:SQL II : 

37 Structured Query Language:SQL II มีบางกรณีที่การเชื่อมโยงข้อมูลระหว่างตารางจะไม่สามารถใช้แทนการสืบค้นข้อมูลแบบซ้อนกันได้ และในบางกรณีจะไม่สามารถใช้การเรียกค้นข้อมูลแบบซ้อนกันแทนการเชื่อมโยงข้อมูลระหว่างตารางได้ เนื่องจากเมื่อใช้การเชื่อมโยงข้อมูลระหว่างตาราง คอลัมน์ที่เป็นผลลัพธ์จะมาจากตารางไหนในกลุ่มตารางที่ถูกเชื่อมโยงถึงกันก็ได้ แต่ในกรณีการใช้การเรียกค้นข้อมูลแบบซ้อนคอลัมน์ที่เป็นผลลัพธ์จะต้องมาจากตารางที่ถูกกล่าวในประโยค FROM ของคำสั่ง SELECT ในระดับนอกสุดเท่านั้น

Structured Query Language:SQL II : 

38 Structured Query Language:SQL II ตัวอย่างที่ 17 ต้องการทราบว่ามีวิชาใดบ้างที่มีนักศึกษาในระดับที่ไม่ใช่ปี 5 (GR) ลงทะเบียนเรียนจากตัวอย่างสามารถที่จะใช้ประโยคคำสั่งการเชื่อมโยงข้อมูลระหว่างตาราง ENROLLMENT และตาราง STUDENT ดังนี้ SELECT DISTINCT ENROLLMENT.ClassName FROM STUDENT, ENROLLMENT WHERE ENROLLMENT.StudentNumber = STUDENT.SID AND STUDENT.GradeLevel NOT = ‘GR’ หรืออาจจะใช้ประโยคคำสั่งเพื่อสืบค้นข้อมูลแบบซ้อน ซึ่งจะทำให้ผลการทำงานเหมือนกัน ได้ตัวอย่างที่ 18

Structured Query Language:SQL II : 

39 Structured Query Language:SQL II ตัวอย่างที่ 18 ต้องการทราบว่ามีวิชาใดบ้างที่นักศึกษาในระดับที่ไม่ใช่ปี 5 (GR) ลงทะเบียนเรียนโดยใช้ประโยคคำสั่งเพื่อสืบค้นข้อมูลแบบซ้อน SELECT DISTINCT ClassName FROM ENROLLMENT WHERE StudentNumber IN (SELECT SID FROM STUDENT WHERE GradeLevel NOT = ‘GR’)

Structured Query Language:SQL II : 

40 Structured Query Language:SQL II ซึ่งจะได้ผลลัพธ์การทำงานดังนี้

Structured Query Language:SQL II : 

41 Structured Query Language:SQL II วิว (View) วิวคือตารางสมมติ (Virtual Table) ที่ถูกสร้างขึ้นมาจากข้อมูลบางคอลัมน์ของตารางพื้นฐาน (Base Table) ซึ่งเป็นตารางจริงตั้งแต่ 1 ตารางขึ้นไป วิวจึงเป็นเค้าร่าง (Schema) ของระบบฐานข้อมูลที่ผู้ใช้แต่ละคนมองเห็น ในการจัดการระบบฐานข้อมูลจะมีการกำหนดวิวที่แตกต่างกันให้กับผู้ใช้ต่าง ๆ ทำให้ผู้ใช้สามารถใช้ข้อมูลได้เฉพาะส่วนที่กำหนดให้เท่านั้น ซึ่งเป็นการเพิ่มความปลอดภัยและประสิทธิภาพให้กับระบบฐานข้อมูล

Structured Query Language:SQL II : 

42 Structured Query Language:SQL II การสร้างวิว การสร้างวิวใช้คำสั่ง CREATE VIEW ตามด้วยชื่อวิวที่ต้องการสร้างขึ้น และอาจตามด้วยโครงสร้างวิวซึ่งได้แก่ชื่อคอลัมน์ต่าง ๆ ของวิว แล้วตามด้วยคำสั่ง SELECT เพื่อกำหนดข้อมูลส่วนที่จะเลือกจากตารางพื้นฐานมาสร้างวิว ดังนี้ CREATE VIEW <ชื่อวิว> [(<ชื่อคอลัมน์ที่ 1>,< ชื่อคอลัมน์ที่ 2 >),…,< ชื่อ คอลัมน์ที่ n >)] AS <คำสั่งประโยค SELECT> กรณีที่ไม่กำหนดชื่อคอลัมน์ต่าง ๆ ของวิวแสดงว่ากำหนดให้คอลัมน์ของวิวมีชื่อเช่นเดียวกับคอลัมน์จากตารางพื้นฐานของวิวนั้น

Structured Query Language:SQL II : 

43 Structured Query Language:SQL II คำสั่งประโยค SELECT มีรูปแบบเช่นเดียวกับที่ได้อธิบายไว้ก่อนหน้านี้ เราไม่สามารถเปลี่ยนแปลงโครงสร้างของวิวได้ ต้องใช้วิธีการสร้างวิวขึ้นมาใหม่โดยให้ลบวิวเก่าทิ้งไป

Structured Query Language:SQL II : 

44 Structured Query Language:SQL II ตัวอย่างที่ 20 คำสั่งสร้างวิวชื่อ MONTHLY-PAYMENT จากตาราง EMPLOYEE ในรูปที่ 7.2 ให้มี 2 คอลัมน์ซึ่งเลือกข้อมูลจากคอลัมน์ Emp_Id และ Salary CREATE VIEW MONTHLY-PAYMENT AS SELECT Emp_Id, Salary FROM EMPLOYEE

Structured Query Language:SQL II : 

45 Structured Query Language:SQL II ประโยชน์ของการใช้วิว เพื่อรักษาข้อมูลบางส่วนไว้เป็นความลับ โดยเราสามารถจะสร้างวิวให้ผู้ใช้บางคนเห็นเฉพาะบางคอลัมน์ของตารางพื้นฐานเท่านั้น เพื่อรักษาความปลอดภัยและความคงสภาพของข้อมูล โดยการสร้างวิวขึ้นแล้วกำหนดสิทธิเฉพาะให้กับผู้ใช้งานบางคนให้ทำการเปลี่ยนแปลงแก้ไขข้อมูลในวิวนั้นได้ เพื่อใช้วิวแทนคำสั่งเรียกดูข้อมูลที่ใช้ในการทำงานที่จะทำซ้ำเสมอ ๆ

Structured Query Language:SQL II : 

46 Structured Query Language:SQL II การเรียกดูข้อมูลจากวิว การเรียกดูข้อมูลจากวิวที่สร้างขึ้นจะใช้คำสั่ง SELECT เช่นเดียวกับการเรียกดูข้อมูลจากตาราง ดังนี้ SELECT <ชื่อคอลัมน์ที่ต้องการดูข้อมูล> FROM <ชื่อวิว> [WHERE <เงื่อนไข>] การที่วิวเป็นเพียงตารางสมมติซึ่งไม่ถูกเก็บไว้จริงในระบบฐานข้อมูล การเรียกดูข้อมูลจากวิวจะส่งผลไปที่ตารางพื้นฐานของวิวนั้น ๆ โดยคำสั่งเรียกดูข้อมูลจากวิวจะถูกเปลี่ยนไปเป็นคำสั่งที่มีการกระทำต่อตารางพื้นฐานดังตัวอย่าง

Structured Query Language:SQL II : 

47 Structured Query Language:SQL II ตัวอย่างที่ 21 คำสั่งเรียกดูข้อมูลในคอลัมน์ Emp-Id จากวิว MONTHLY-PAYMENT โดยให้แสดงเฉพาะแถวที่มีข้อมูลในคอลัมน์ Salary มากกว่า 35000 SELECT Emp-Id FROM MONTHLY-PAYMENT WHERE Salary > 35000 ระบบจัดการฐานข้อมูลจะแปลงคำสั่งในตัวอย่างที่ 21 เป็นคำสั่งเรียกดูข้อมูลจากตาราง EMPLOYEE ซึ่งเป็นตารางพื้นฐานที่วิว MONTHLY-PAYMENT ถูกสร้างขึ้น ดังนี้ SELECT Emp-Id FROM EMPLOYEE WHERE Salary > 35000

Structured Query Language:SQL II : 

48 Structured Query Language:SQL II เนื่องจากวิวเป็นตารางสมมติไม่ถูกเก็บไว้จริงในระบบฐานข้อมูล การทำการเพิ่มเติมเปลี่ยนแปลงหรือลบข้อมูลออกจากวิวโดยใช้คำสั่ง INSERT, DELETE และ UPDATE จะส่งผลไปที่ตารางพื้นฐานของวิวนั้น ๆ โดยคำสั่ง SQL ในการจัดการกับวิวที่ถูกสร้างจากตารางพื้นฐานหนึ่งตารางจะถูกเปลี่ยนไปเป็นคำสั่งที่ใช้กับตารางพื้นฐาน ดังนี้ การเพิ่มข้อมูลโดยผ่านวิวโดยใช้คำสั่ง INSERT INTO จะทำให้การไปเพิ่มข้อมูลในตารางพื้นฐานของวิวนั้น โดยจะใส่ค่าลงไปเฉพาะใต้คอลัมน์ที่กำหนดในคำสั่ง INSERT INTO นั้น เท่านั้น เราสามารถจะใช้คำสั่ง UPDATE กับวิว เพื่อที่จะไปเปลี่ยนแปลงค่าที่อยู่ในตารางพื้นฐานของวิวนั้น การใช้คำสั่ง DELETE กับวิวจะทำให้มีการไปลบแถวทั้งแถวที่อยู่ในตารางพื้นฐานของวิวนั้นถูกสร้างขึ้นมา

Structured Query Language:SQL II : 

49 Structured Query Language:SQL II การลบวิว การลบวิวใช้คำสั่ง DROP VIEW ตามด้วยชื่อวิว ดังนี้ DROP VIEW <ชื่อวิวที่ต้องการลบ> ตัวอย่างที่ 22 ต้องการลบวิวที่ชื่อ MONTHLY-PAYMENT ที่สร้างไว้แล้วจะทำได้โดยใช้คำสั่ง DROP VIEW MONTHLY-PAYMENT

Structured Query Language:SQL II : 

50 Structured Query Language:SQL II การกำหนดสิทธิในการใช้ข้อมูล เพื่อความถูกต้องและปลอดภัยในการใช้ข้อมูลในระบบฐานข้อมูล ควรมีการกำหนดว่าอะไรจะให้ผู้ใช้คนใดมีสิทธิอย่างไรในการเข้ามาใช้ข้อมูลใด ตัวอย่าง เช่นกำหนดให้ผู้ใช้ทุกคนมีสิทธิในการเข้ามาเรียกดูข้อมูลในตารางได้ แต่เฉพาะหัวหน้าหน่วยงานเท่านั้นที่มีสิทธิในการเพิ่มเติมข้อมูล หรือกำหนดให้บุคคลากรในแต่ละฝ่ายเห็นเฉพาะข้อมูลแถวที่เป็นของฝ่ายนั้น ๆ เท่านั้น

Structured Query Language:SQL II : 

51 Structured Query Language:SQL II การให้สิทธิ ใช้คำสั่ง GRANT เพื่อให้สิทธิในการใช้ตารางหรือวิว หรือเฉพาะบางคอลัมน์ของตารางนั้น โดยกำหนดว่าจะให้สิทธิในการทำอะไรซึ่งหมายถึงการเรียกดูข้อมูล (SELECT) เพิ่มเติมข้อมูล (INSERT) เปลี่ยนแปลงข้อมูล (UPDATE) และลบข้อมูล (DELETE) กับตารางหรือวิวใดให้ผู้ใช้ใดบ้าง รูปแบบคำสั่งในภาษา SQL ที่ใช้เพื่อกำหนดสิทธิคือ GRANT ตามด้วยสิทธิที่อนุญาตให้กระทำกับข้อมูล ตามด้วย ON แล้วตามด้วยชื่อตารางหรือชื่อวิว และอาจตามด้วยชื่อของคอลัมน์เฉพาะส่วนที่ต้องการกำหนดสิทธิให้เท่านั้น ตามด้วย TO แล้วตามด้วยกลุ่มผู้ใช้ที่ได้รับสิทธินั้น แล้วอาจตามด้วย WITH GRANT OPTION ดังนี้

Structured Query Language:SQL II : 

52 Structured Query Language:SQL II GRANT<สิทธิที่อนุญาตให้กระทำกับข้อมูลได้แก่ SELECT, INSERT, DELETE, UPDATE หรือ ALL> ON <ชื่อตารางหรือวิว> TO <กลุ่มผู้ใช้ที่ได้รับสิทธินั้น> [WITH GRANT OPTION] WITH GRANT OPTION คือการอนุญาตให้ผู้ใช้ให้สิทธิ่ต่อกันเป็นทอด ๆ ได้เช่น ผู้ใช้ A ให้สิทธิแก่ผู้ใช้ B ในการใช้ข้อมูลจากตาราง Table1 พร้อมด้วย WITH GRANT OPTION จะทำให้ผู้ใช้ B สามารถให้สิทธิในการใช้ข้อมูลจะเก็บไว้ในการใช้ข้อมูลของ Table1 แก่ผู้ใช้ C ผู้ใช้ D หรือผู้ใช้อื่น ๆ ต่อไปได้

Structured Query Language:SQL II : 

53 Structured Query Language:SQL II ตัวอย่างที่ 23 คำสั่งให้สิทธิในการเรียกดูข้อมูล และเพิ่มเติมข้อมูลในตาราง EMPLOYEE ให้กับ KATHY และ JAMES โดยให้ KATHY และ JAMES สามารถให้สิทธินี้แก่ผู้ใช้อื่นต่อไปได้อีก GRANT SELECT, INSERT ON EMPLOYEE TO KATHY, JAMES WITH GRANT OPTION การกำหนดสิทธิให้กระทำได้ทุกอย่างคือ เรียกดูข้อมูล เพิ่มเติมข้อมูล ลบข้อมูล และเปลี่ยนแปลงข้อมูล จะใช้คำว่า ALL

Structured Query Language:SQL II : 

54 Structured Query Language:SQL II ตัวอย่างที่ 24 คำสั่งให้สิทธิในการเรียกดูข้อมูล เพิ่มเติมข้อมูล และเปลี่ยนแปลงข้อมูล ในตาราง EMPLOYEE ให้กับ JOHN GRANT ALL ON EMPLOYEE TO JOHN การระบุว่าให้สิทธิกับผู้ใช้งานทุกคนใช้คำว่า PUBLIC ตัวอย่างที่ 25 คำสั่งให้สิทธิในการเรียกดูข้อมูลในตาราง EMPLOYEE ให้กับผู้ใช้ทุกคน GRANT SELECT ON EMPLOYEE TO PUBLIC

Structured Query Language:SQL II : 

55 Structured Query Language:SQL II การยกเลิกสิทธิ การยกเลิกสิทธิที่ให้ไว้ ใช้คำสั่ง REVOKE แล้วตามด้วยสิทธิที่ต้องการถอดถอน ตามด้วยชื่อตาราง หรือ ชื่อวิว ตามด้วยรายชื่อผู้ใช้ที่ถูกถอดถอนสิทธิ ดังนี้ REVOKE <สิทธิที่ถอนการอนุญาต> ON <ชื่อตารางหรือวิว> FROM <กลุ่มผู้ใช้> ตัวอย่างที่ 24 คำสั่งยกเลิกสิทธิในการเพิ่มเติมข้อมูลในตาราง EMPLOYEE ที่ให้ JAMES ไว้ในคำสั่งที่จากตัวอย่างที่ 23 REVOKE INSERT ON EMPLOYEE FROM JAMES