งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

SQL (Structure Query Language) ตอนที่ 2 Online available at

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "SQL (Structure Query Language) ตอนที่ 2 Online available at"— ใบสำเนางานนำเสนอ:

1 SQL (Structure Query Language) ตอนที่ 2 Online available at http://www.ict.up.ac.th/somporns/db

2 จุดประสงค์การเรียนรู้  อธิบายลักษณะภาษาสำหรับจัดการขอมูล  สามารถเขียนคำสั่งภาษา SQLในเชิง DML ได้

3 Introduction to Structured Query Language (SQL) l

4 l

5 l

6 ตัวอย่างฐานข้อมูลที่ใช้ คือ student ประกอบด้วยตาราง 9 ตาราง คือ l Class เก็บข้อมูล class และอาจารย์ที่ปรึกษาของแต่ละ class l Student เก็บข้อมูลนักศึกษา l Club เก็บข้อมูลชมรมที่นักศึกษาเข้าร่วม l Hobby เก็บข้อมูลงานอดิเรกของนักศึกษา l Subject เก็บข้อมูลรายวิชา l student_subject เก็บข้อมูลการลงทะเบียนเรียน l Teacher เก็บข้อมูลอาจารย์ผู้สอน l Textbook เก็บข้อมูลหนังสือ l teacher_textbook เก็บข้อมูลอาจารย์ผู้สอนที่เป็นผู้เขียนหนังสือ

7 Update ข้อมูลด้วย SQL Command l เพิ่มข้อมูลทีละแถว (INSERT) l เพิ่มข้อมูลทีละเป็นชุด (INSERT) l แก้ไขค่าข้อมูล (UPDATE) l ลบข้อมูลในตาราง (DELETE)

8 เพิ่มข้อมูลทีละแถว (INSERT) Syntax INSERT INTO table_name(column 1,column 2,…,column n ) VALUES (Data 1, Data 2,…,Data n ); ตัวอย่าง INSERT INTO student (studentid, name, birthdate, class) VALUES ('4928001', 'นางสาวนภาพร ใจดี', '1982-04-23', 'A')

9 เพิ่มข้อมูลทีละเป็นชุด (INSERT) Syntax INSERT INTO table_name(column1,column2,…,columnn) SELECT_CLAUSE; ตัวอย่าง INSERT INTO Student (studentid, name, birthdate, class) SELECT studentid, name, birthdate, class FROM student;

10 แก้ไขค่าข้อมูล (UPDATE) Syntax UPDATE table_name SET column1=value1[,column2=value2,…] WHERE condition; ตัวอย่าง Update student set Advisor = 'รัตนา ใจดี' where StudentID ='49280001'

11 ลบข้อมูลในตาราง (DELETE) Syntax DELETE FROM table_name WHERE condition; ตัวอย่าง DELETE FROM Student WHERE StudentID ='49280001 ' ;

12 คำสั่ง SELECT เบื้องต้น Syntax SELECT * FROM table_name; ตัวอย่าง SELECT * FROM subject; 2.1. SELECT ข้อมูลทั้งหมดที่อยู่ในตาราง

13 คำสั่ง SELECT เบื้องต้น 2.1. SELECT ข้อมูลทั้งหมดที่อยู่ในตาราง ผลลัพธ์

14 Syntax SELECT column1, column2,…,columnn FROM table_name; ตัวอย่าง SELECT name FROM subject; 2.2. SELECT ข้อมูลบางคอลัมน์ในตาราง คำสั่ง SELECT เบื้องต้น

15 2.2. SELECT ข้อมูลบางคอลัมน์ในตาราง ผลลัพธ์ คำสั่ง SELECT เบื้องต้น

16 2.3 เรียงลำดับข้อมูลด้วย ORDER BY Syntax SELECT column1, column2,…,columnn FROM table_name ORDER BY column_order1 [DESC/ASC],…, column_ordern; ตัวอย่าง SELECT * FROM subject ORDER BY subjectid DESC; คำสั่ง SELECT เบื้องต้น การเรียงลำดับมี 2 แบบ 1. DESC เรียงจากมากไปน้อย 2. ASC เรียงจากน้อยไปมาก

17 2.3 เรียงลำดับข้อมูลด้วย ORDER BY ผลลัพธ์ คำสั่ง SELECT เบื้องต้น ตัวอย่าง SELECT * FROM subject ORDER BY subjectid DESC;

18 2.3 เรียงลำดับข้อมูลด้วย ORDER BY ผลลัพธ์ คำสั่ง SELECT เบื้องต้น ตัวอย่าง SELECT * FROM subject ORDER BY subjectid ASC;

19 2.4 ค้นหาข้อมูลแบบมีเงื่อนไข Syntax SELECT column1, column2,…,columnn FROM table_name WHERE condition; ตัวอย่าง SELECT * FROM student WHERE class=‘A’; คำสั่ง SELECT เบื้องต้น

20 2.4 ค้นหาข้อมูลแบบมีเงื่อนไข ผลลัพธ์ ตัวอย่าง SELECT * FROM student WHERE class=‘A’; คำสั่ง SELECT เบื้องต้น

21 ชื่อฟังก์ชั่นการใช้งาน AVGหาค่าเฉลี่ยของข้อมูล COUNTนับจำนวนแถวทั้งหมด MAXหาค่ามากที่สุด MINหาค่าน้อยที่สุด SUMหาผลบวกของข้อมูลในคอลัมน์ ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

22 ฟังก์ชั่น AVG Syntax SELECT AVG(column) AS COLUMN_NAME FROM table_name WHERE condition; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

23 ฟังก์ชั่น AVG ตัวอย่าง คำนวณหาค่าเฉลี่ยคะแนนของวิชารหัส I002 SELECT AVG(score) AS avg_score FROM student_subject WHERE subjectid=‘I002’; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

24 ฟังก์ชั่น COUNT Syntax SELECT COUNT(column) AS COLUMN_NAME FROM table_name WHERE condition; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

25 ฟังก์ชั่น COUNT ตัวอย่าง นับจำนวนนักศึกษาที่ลงทะเบียนในภาคการศึกษาที่ 1/2546 SELECT COUNT(StudentID) AS qty_stu_regis FROM student_subject WHERE term=‘1/2546’; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

26 ฟังก์ชั่น MAX, MIN Syntax SELECT [MAX/MIN](column) AS COLUMN_NAME FROM table_name WHERE condition; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

27 ฟังก์ชั่น MAX, MIN ตัวอย่าง หาคะแนนสูงสุดของรหัสวิชา I002 SELECT MAX(score) AS max_score FROM student_subject where subjectid='I002'; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน ผลลัพธ์ที่แสดงจะปรากฎคะแนน สูงสุดเฉพาะวิชาที่มีรหัส I002 ถ้าลบบรรทัดในส่วนของ WHERE CLAUSE ทิ้งจะแสดงคะแนน สูงสุดของทุกรหัสวิชาที่มีในตาราง student_subject

28 ฟังก์ชั่น MAX, MIN ตัวอย่าง หาคะแนนต่ำสุดของรหัสวิชา I002 SELECT MIN(score) AS min_score FROM student_subject where subjectid='I002'; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน ผลลัพธ์ที่แสดงจะปรากฎคะแนน ต่ำสุดเฉพาะวิชาที่มีรหัส I002 ถ้าลบบรรทัดในส่วนของ WHERE CLAUSE ทิ้งจะแสดงคะแนนต่ำสุด ของทุกรหัสวิชาที่มีในตาราง student_subject

29 ฟังก์ชั่น SUM Syntax SELECT SUM(column) AS COLUMN_NAME FROM table_name WHERE condition; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

30 ฟังก์ชั่น SUM ตัวอย่าง หาคะแนนรวมทั้งหมดของรหัสวิชา I002 SELECT sum(score) AS total_score FROM student_subject WHERE subjectid ='I002'; ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน ผลลัพธ์ที่แสดงจะปรากฎคะแนน รวมเฉพาะวิชาที่มีรหัส I002 ถ้าลบบรรทัดในส่วนของ WHERE CLAUSE ทิ้งจะแสดงคะแนนรวม ของทุกรหัสวิชาที่มีในตาราง student_subject

31 ตัวอย่าง หาคะแนนเฉลี่ย คะแนนรวม คะแนนสูงสุด คะแนน ต่ำสุด ของแต่ละรหัสวิชา โดยแสดงรหัสวิชาออกมาด้วย SELECT subjectid AS รหัสวิชา, sum(score) as คะแนนรวม, AVG(score) AS ค่าเฉลี่ย, min(score) as คะแนนต่ำสุด, max(score) as คะแนนสูงสุด FROM student_subject GROUP BY subjectid ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

32 ผลลัพธ์ของตัวอย่าง หาคะแนนเฉลี่ย คะแนนรวม คะแนนสูงสุด คะแนนต่ำสุด ของแต่ละรหัสวิชา โดยแสดงรหัสวิชาออกมาด้วย ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

33 ตัวอย่าง หาคะแนนเฉลี่ย คะแนนรวม คะแนนสูงสุด คะแนนต่ำสุด ของแต่ละรหัสวิชา โดยแสดงรหัสวิชาออกมาด้วย โดยเรียงลำดับ รหัสวิชาจากมากไปน้อย SELECT subjectid AS รหัสวิชา, sum(score) as คะแนนรวม, AVG(score) AS ค่าเฉลี่ย, min(score) as คะแนนต่ำสุด, max(score) as คะแนนสูงสุด FROM student_subject GROUP BY subjectid ORDER BY subjectid DESC ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

34 ผลลัพธ์ของตัวอย่าง หาคะแนนเฉลี่ย คะแนนรวม คะแนนสูงสุด คะแนนต่ำสุด ของแต่ละรหัสวิชา โดยแสดงรหัสวิชาออกมาด้วย โดย เรียงลำดับรหัสวิชาจากมากไปน้อย ฟังก์ชั่นที่ใช้คำนวณใน SQL มาตรฐาน

35 โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี เพื่ออำนวยความสะดวกให้กับผู้ใช้ และช่วยให้การคิวรี ครอบคลุมทุกความต้องการ ภาษา SQL ได้เตรียม โอเปอเรเตอร์ประเภทต่าง ๆ ไว้ใช้งานซึ่งก็มีที่ใช้ในการ เปรียบเทียบ ใช้ในการคำนวณ เป็นต้น

36 โอเปอเรเตอร์กลุ่มนี้ใช้กำหนดเงื่อนไขใน ส่วนของ WHERE หรือ HAVING เพื่อ เปรียบเทียบค่าของข้อมูลในคอลัมน์ ประกอบ ไปด้วยเครื่องหมาย =, <>, >, >=, < และ <= โดยระบบฐานข้อมูลแต่ละตัวอาจจะใช้ เครื่องหมายเหล่านี้ต่างกันไปบ้างก็ได้ โอเปอเรเตอร์เปรียบเทียบ (Comparison Operator) โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี

37 SELECT studentid, subjectid, grade, score FROM student_subject WHERE score > 80; โอเปอเรเตอร์เปรียบเทียบ (Comparison Operator) โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี ตัวอย่าง แสดงข้อมูลรหัสนักศึกษา รหัสวิชา เกรด และคะแนนของนักศึกษาทุกคนที่ได้ คะแนนมากกว่า 80 คะแนน

38 โอเปอเรเตอร์เปรียบเทียบ (Comparison Operator) โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี ผลลัพธ์ของตัวอย่าง แสดงข้อมูลรหัสนักศึกษา รหัสวิชา เกรด และคะแนน ของนักศึกษาทุกคนที่ได้คะแนนมากกว่า 80 คะแนน

39 โอเปอเรเตอร์กลุ่มนี้ใช้ในการคำนวณพื้นฐาน ประกอบด้วยเครื่องหมาย +, -, * และ / ซึ่งแทนการบวก ลบ คูณ และหารตามลำดับ โอเปอเรเตอร์ทางคณิตศาสตร์ (Arithmetic Operator) โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี

40 โอเปอเรเตอร์ทางคณิตศาสตร์ (Arithmetic Operator) Example จงหาค่าพิสัยของคะแนนในแต่ละรายวิชา SELECT subjectid, (MAX(score)+MIN(score))/2 AS ค่าพิสัย FROM student_subject GROUP BY subjectid; โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี

41 โอเปอเรเตอร์ทางตรรกะ (Logical Operator) โอเปอเรเตอร์ทางตรรกะใช้สำหรับเชื่อม เงื่อนไขที่กำหนดเข้าด้วยกัน ทำให้ข้อมูลที่ได้ จากการคิวรีตรงกับความต้องการมากขึ้น โอเปอเรเตอร์ในกลุ่มนี้ได้แก่ AND, OR และ UNION โดยแต่ละตัวมีลักษณะการใช้งานที่ แตกต่างกันดังนี้ โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี

42 โอเปอเรเตอร์ทางตรรกะ (Logical Operator) โอเปอเรเตอร์การใช้งาน AND ผลลัพธ์ที่ได้จากการใช้ AND เชื่อมเงื่อนไขคือ ข้อมูลที่ ตรงตามเงื่อนไขทั้งหมด OR ผลลัพธ์ที่ได้จากการใช้ OR เชื่อมเงื่อนไขคือ ข้อมูลที่ ตรงเงื่อนไขใดเงื่อนไขหนึ่ง UNION ผลลัพธ์ที่ได้จากการใช้ UNION เชื่อมเงื่อนไขคือ ผลลัพธ์ที่ได้จากการใช้ SELECT ตั้งแต่ 2 คำสั่งขึ้นไป เข้าด้วยกัน โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี

43 ตัวอย่าง จงแสดงรหัสนักศึกษา รหัสวิชา และคะแนนของ นักศึกษาที่ได้คะแนนระหว่าง 60-70 คะแนนเฉพาะวิชารหัส I001 SELECT studentid, subjectid, score FROM student_subject WHERE (score >= 60 AND score <= 70) AND subjectid=‘I001’; โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี โอเปอเรเตอร์ทางตรรกะ (Logical Operator)

44 ตัวอย่าง จงแสดงรหัสนักศึกษา ชื่อนักศึกษาที่อยู่ห้อง C ร่วมกับ รหัสวิชา และชื่อวิชาที่มีจำนวนหน่วยกิต 2 หน่วยกิต SELECT studentid, name FROM student WHERE class = ‘C’ UNION SELECT subjectid, name FROM subject WHERE credit = 2; โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี โอเปอเรเตอร์ทางตรรกะ (Logical Operator)

45 โอเปอเรเตอร์ที่มีลักษณะเฉพาะตัวไม่สามารถจัดกลุ่มได้ โอเปอเรเตอร์การใช้งาน DISTINCT กำหนดไว้หน้าคอลัมน์เมื่อต้องการนำเฉพาะข้อมูลที่ไม่ซ้ำกันมาใช้ เท่านั้น IN ใช้เปรียบเทียบข้อมูลกับกลุ่มของค่าคงที่ โดยข้อมูลจะตรงกับเงื่อนไขถ้า มีค่าเท่ากับข้อมูลตัวใดตัวหนึ่งในกลุ่มที่กำหนดขึ้นมาหลัง IN เท่านั้น LIKE เปรียบเทียบข้อมูลที่มีชนิดเป็นข้อความกับรูปแบบที่กำหนดไว้หลัง LIKE BETWEEN... AND ใช้เมื่อข้อมูลที่ต้องการมีลักษณะเป็นช่วง เช่น ตั้งแต่ 25-30 หรือ ก-ฮ เป็น ต้น NOTเปลี่ยนเงื่อนไขให้อยู่ในรูปปฏิเสธ โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี

46 โอเปอเรเตอร์ที่มีลักษณะเฉพาะตัวไม่สามารถจัดกลุ่มได้ โอเปอเรเตอร์การใช้งาน IS NULL ใช้เปรียบเทียบว่ามีค่าเป็น NULL หรือไม่ โดยมักจะใช้กับ NOT เป็น IS NOT NULL EXISTSทดสอบว่ามีข้อมูลใดเป็นผลลัพธ์มาจากการคิวรีหรือใม่ ANY เป็นโอเปอเรเตอร์ที่ใช้เมื่อต้องการเปรียบเทียบกับกลุ่ม ข้อมูลที่มีหลายค่าโดยเงื่อนไขจะเป็นจริงก็ต่อเมื่อมีข้อมูล ตัวใดตัวหนึ่งในกลุ่มทำให้เป็นจริง ALLใช้งานเช่นเดียวกับ ANY แต่เงือนไขต้องเป็นจริงทั้งหมด โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี

47 ตัวอย่าง จงหาค่าเฉลี่ยของคะแนนวิชา P001 โดยไม่ใช้ฟังก์ชั่น AVG SELECT SUM(score)/COUNT(*) AS ค่าเฉลี่ยของคะแนน FROM student_subject WHERE subjectid = ‘P001’ AND score IS NOT NULL; โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี โอเปอเรเตอร์ที่มีลักษณะเฉพาะตัวไม่สามารถจัดกลุ่มได้

48 ตัวอย่าง จงแสดงรหัสนักศึกษา รหัสวิชา และคะแนนของ นักศึกษาที่ได้คะแนนระหว่าง 60 – 70 SELECT studentid, subjectid, score FROM student_subject WHERE score BETWEEN 60 AND 70; โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี โอเปอเรเตอร์ที่มีลักษณะเฉพาะตัวไม่สามารถจัดกลุ่มได้

49 ตัวอย่าง จงแสดงรายชื่อชมรมทั้งหมด SELECT DISTINCT club FROM club; โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี โอเปอเรเตอร์ที่มีลักษณะเฉพาะตัวไม่สามารถจัดกลุ่มได้

50 ตัวอย่าง จงแสดงรายชื่อชมรมทั้งหมด SELECT club FROM club; โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี โอเปอเรเตอร์ที่มีลักษณะเฉพาะตัวไม่สามารถจัดกลุ่มได้ ลองทำดูสิผลลัพธ์เป็นอย่างไร เปรียบเทียบกับการใช้ distinct ในการ select

51 ตัวอย่าง จงแสดงชื่อนักศึกษาที่ขึ้นต้นด้วยอักษร ก และอยู่ห้อง A, B, หรือ C SELECT name, class FROM student WHERE name LIKE ‘ก%’ AND class in (‘A’,’B’,’C’); โอเปอเรเตอร์ (OPERATOR) ที่ใช้ในการคิวรี โอเปอเรเตอร์ที่มีลักษณะเฉพาะตัวไม่สามารถจัดกลุ่มได้

52 คิวรีข้อมูลเป็นกลุ่มด้วย GROUP BY ในตัวอย่างที่ผ่านมาไม่ว่าเราจะใช้ฟังก์ชั่นใดก็ตามกับข้อมูล การ กระทำเหล่านั้นจะมีผลกับข้อมูลทุกๆ แถวที่ตรงกับเงื่อนไขของการคิวรี ทั้งหมด ดังนั้นคำสั่ง SELECT ข้อมูลโดยมีการจัดกลุ่มข้อมูลด้วย ประโยค GROUP BY ซึ่งจะมีรูปแบบดังนี้ Syntax SELECT column1 [, column2,...] FROM table_name GROUP BY group1 [, group2,...];

53 ตัวอย่าง จงหาจำนวนนักศึกษาในแต่ละชั้นเรียน SELECT class, count(*) AS TOTAL FROM student GROUP BY class; คิวรีข้อมูลเป็นกลุ่มด้วย GROUP BY

54 ตัวอย่าง จงนับจำนวนนักศึกษาตามระดับเกรดที่ได้ ของ วิชาที่มีรหัส I001 SELECT subjectid, grade, COUNT(*) FROM student_subject WHERE grade IS NOT NULL AND subjectid =‘I001’ GROUP BY subjectid, grade; คิวรีข้อมูลเป็นกลุ่มด้วย GROUP BY

55 ผลลัพธ์ของตัวอย่าง จงนับจำนวนนักศึกษาตามระดับ เกรดที่ได้ ของวิชาที่มีรหัส I001 คิวรีข้อมูลเป็นกลุ่มด้วย GROUP BY ลองทำดู *** นับจำนวนนักศึกษาตาม ระดับเกรดที่ได้ ของทุกๆ วิชา

56 การเลือกกลุ่มข้อมูลโดยใช้ HAVING กำหนดเงื่อนไข Syntax SELECT column1 [, column2,...] FROM table_name GROUP BY group1 [, group2,...] HAVING group_condition;

57 SELECT subjectid, COUNT(*) FROM teacher GROUP BY subjectid HAVING COUNT(*) >=2; การเลือกกลุ่มข้อมูลโดยใช้ HAVING กำหนดเงื่อนไข ตัวอย่าง จงแสดงรหัสวิชาและจำนวนอาจารย์ผู้สอนในวิชาที่มี อาจารย์ผู้สอนตั้งแต่สองคนขึ้นไป

58 วิธีค้นหาข้อมูลที่ซับซ้อนด้วยคำสั่ง SELECT จากที่กล่าวมาเบื้องต้นจะเห็นว่าการเลือกข้อมูล ขึ้นมาแสดงนั้นสามารถเลือกมาได้เพียงตารางเดียว แต่ การที่จะได้ข้อมูลที่ต้องการในบางครั้งต้องมีการดึงค่า ข้อมูลมาจากตารางอื่น ๆ มาประกอบด้วย ซึ่งวิธีการหา ข้อมูลดังกล่าวเราจะกล่าวถึงในหัวข้อนี้

59 การ join มี 3 แบบ  Inner join : เลือกเฉพาะ record ที่สัมพันธ์กันเท่านั้น  Left join : เลือก record ทั้งหมดของ table ก่อน keyword โดย ไม่สนใจว่าจะมี ความสัมพันธ์กับ record ใน table ที่ 2 หรือไม่  Right join : เลือก record ทั้งหมดของ table หลัง keyword โดยไม่สนใจว่าจะมีความสัมพันธ์กับ record ใน table ที่ 1 หรือไม่

60 คิวรีข้อมูลจากหลายตารางผ่านการ JOIN Syntax SELECT column_list FROM table1, table2 WHERE [table1.]column1 = [table2.]column2;

61 ตัวอย่าง จงแสดงรหัสวิชา ชื่อวิชา และอาจารย์ผู้สอนในวิชา นั้น ๆ ทั้งหมด SELECT subject.subjectid, name, teacher FROM subject, teacher WHERE subject.subjectid = teacher.subjectid; คิวรีข้อมูลจากหลายตารางผ่านการ JOIN

62 ผลลัพธ์ คิวรีข้อมูลจากหลายตารางผ่านการ JOIN

63 ตัวอย่าง จงแสดงรหัสนักศึกษา ชื่อนักศึกษา รหัสวิชา เกรด คะแนน และภาคการศึกษา เฉพาะนักศึกษาที่ได้คะแนนสูงที่สุด SELECT s1.studentid, s2.name, s1.subjectid, s1.grade, s1.score, s1.term FROM student_subject AS s1, student AS s2 WHERE score = ( SELECT max( score ) FROM student_subject ) AND s1.studentid = s2.studentid; คิวรีข้อมูลจากหลายตารางผ่านการ JOIN

64 ผลลัพธ์ของตัวอย่าง จงแสดงรหัสนักศึกษา ชื่อนักศึกษา รหัส วิชา เกรด คะแนน และภาคการศึกษา เฉพาะนักศึกษาที่ได้ คะแนนสูงที่สุด คิวรีข้อมูลจากหลายตารางผ่านการ JOIN

65 ตัวอย่าง จงแสดงชื่ออาจารย์ที่ปรึกษาของนักศึกษาที่มีชื่อว่า “ปักษา ระเริงชล” SELECT name, class.class, advisor FROM student, class WHERE student.class = class.class AND name = ‘ปักษา ระเริงชล’; คิวรีข้อมูลจากหลายตารางผ่านการ JOIN

66 ตัวอย่าง จงแสดงว่าอาจารย์ มานะ มีวินัย ใช้หนังสือ Hotmail & MSN สอนวิชาใด SELECT subjectid, a.teacher, textbook FROM teacher AS a, teacher_textbook AS b WHERE a.teacher=b.teacher AND b.teacher=‘มานะ มีวินัย’ AND textbook=‘Hotmail & MSN’; คิวรีข้อมูลจากหลายตารางผ่านการ JOIN

67 ตัวอย่างการ join Employee_IDName 01Ant 02Bat 03Cat 04Dog employee Prod_IDProductEmployee_ID 234Printer01 657Table03 865Chair03 865Chair07 order employee และ order มีความสัมพันธ์แบบ one-to-many จำนวน field จะต้องเท่ากับ 5 field จำนวน record ของผลลัพธ์การ join จะต้องไม่เกิน 4*4= 16

68 Inner join Select * from employee inner join order on employee.Employee_ID = order.Employee_ID; Employee_IDNameProd_IDProductEmployee_ID 01Ant234Printer01 03Cat657Table03 Cat865Chair03

69 Inner join SELECT * FROM student AS s INNER JOIN student_subject As ss ON s.studentid = ss.studentid; ลองทำดู *** ผลลัพธ์ของคิวรี่ด้านบนเป็นอย่างไร เทียบกับคิวรี่ด้านล่าง SELECT * FROM student AS s, student_subject As ss WHERE s.studentid = ss.studentid;

70 แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join คือการแสดงข้อมูลที่เราต้องการโดยที่ ข้อมูลบางค่าที่เรายังไม่ได้กำหนดค่าจะมีค่าเป็น NULL ดังนั้นถ้ามีการ JOIN ตารางก็จะไม่สามารถดึงค่าขึ้นมาแสดงได้ สมมุติว่าเราต้องการแสดง รหัสวิชา และชื่อวิชาทั้งหมดพร้อมทั้งชื่ออาจารย์ผู้สอนของรายวิชานั้น ๆ โดยถ้าวิชาใดเพิ่งเปิด ขึ้นมาและยังไม่ทันกำหนดอาจารย์ผู้สอนก็ได้แสดงค่าเป็น NULL เราจะไม่สามารถใช้วิธีการ JOIN แบบที่ผ่านมาได้ ยกตัวอย่างเช่น ข้อมูลที่ถูกจัดเก็บอยู่ในตาราง Subject และ Teacher ซึ่งถ้าเราทำการ join ตารางทั้งสองเข้าด้วยกัน เราก็จะได้เฉพาะข้อมูลของวิชาที่มีอาจารย์ผู้สอนแล้วเท่านั้น วิชาใด ที่เพิ่งทำการเปิดและยังไม่ได้กำหนดอาจารย์ผู้สอนก็จะไม่ปรากฏขึ้นมาด้วย

71 ดังนั้นถ้าเราต้องการให้แสดงชื่อของรายวิชาที่ทำการเปิดสอน ทั้งหมด เราต้องใช้วิธีการ join ที่เรียกว่า outer join ซึ่งในระบบฐานข้อมูล แต่ละตัวจะไม่เหมือนกัน ส่วนใน MS Access จะมีอยู่ 2 วิธีคือ 1. LEFT JOIN หมายถึงให้ทำการแสดงแถวจากด้านซ้ายมือมาแสดง ทั้งหมด ไม่ว่าแถวนั้นจะตรงตามเงื่อนไขของการ join หรือไม่ก็ตาม 2. RIGHT JOIN ตรงข้ามกับ LEFT JOIN แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join

72 Syntax SELECT column_list FROM table1 LEFT JOIN table2 ON join_condition; แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join

73 ตัวอย่าง จงแสดงรหัสวิชาทั้งหมดพร้อมทั้งชื่ออาจารย์ ผู้สอนของรายวิชานั้น ๆด้วย SELECT a.subjectid, name, teacher FROM subject AS s LEFT JOIN teacher AS t ON s.subjectid=t.subjectid; แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join

74 ผลลัพธ์ แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join

75 SELECT * FROM class LEFT JOIN teacher ON class.advisor = teacher.teacher; แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join

76 ผลลัพธ์ของ left join

77 SELECT * FROM class RIGHT JOIN teacher ON class.advisor = teacher.teacher; แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join

78 ผลลัพธ์ของ right join แสดงแถวที่ไม่ตรงกับเงื่อนไขด้วยวิธี Outer Join

79 การ join มากกว่า 2 ตาราง Table 1 Table 2 Table 3 Table 1 Table 2 Table 3 Table 1 Table 2 Table 3 Table 4 Table 5 Table 6

80 SELECT * FROM Table1 INNER JOIN (Table2 INNER JOIN Table3 ON Table2.f = Table3.f) ON Table1.fx = Table2.fx ; SELECT * FROM Table1 INNER JOIN (Table2, Table3 ) ON (Table1.fx = Table2.fx AND Table2.f = Table3.f) ; การ join มากกว่า 2 ตาราง

81 SELECT * FROM Table1 INNER JOIN Table2 ON Table1.fx = Table2.fx INNER JOIN Table3 ON Table1.f = Table3.f ; SELECT * FROM Table1 INNER JOIN (Table2, Table3 ) ON (Table1.fx = Table2.fx AND Table1.f = Table3.f) ; การ join มากกว่า 2 ตาราง

82 SELECT * FROM Table1 INNER JOIN (Table2, Table4, Table5, Table3, Table6 ) ON (Table1.f1 = Table2.f1 AND Table2.f2 = Table4.f2 AND Table4.f3 = Table5.f3 AND Table1.f4 = Table3.f4 AND Table3.f5 = Table6.f5 ) ; การ join มากกว่า 2 ตาราง

83 ใช้คำสั่ง SELECT ซ้อนกันหลายระดับ (Sub queries) ตัวอย่าง จงแสดงรหัสนักศึกษาของนักศึกษาซึ่งอยู่ในชมรมที่มีจำนวนสมาชิก เท่ากับ 3 คน SELECT studentid, club FROM club WHERE club IN (SELECT club FROM club GROUP BY club HAVING COUNT(*) =3);

84 การใช้โอเปอเรเตอร์ ANY และ ALL ถ้าผลลัพธ์ของ Subquery ได้ออกมามากกว่า 1 ค่า เราจะไม่ สามารถใช้ = เพื่อเปรียบเทียบค่าในส่วน WHERE ของ Main query ได้ จากปัญหาดังกล่าวเราสามารถใช้โอเปอเรเตอร์ = ร่วมกับ ANY ได้

85 การใช้โอเปอเรเตอร์ ANY และ ALL = ANY หมายถึง เท่ากับค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด > ANY หมายถึง มากกว่าค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด ALL หมายถึง ไม่เท่ากับค่าทุกค่าในกลุ่มข้อมูลที่กำหนด >= ALL หมายถึง มากกว่าหรือเท่ากับค่าทุกค่าในกลุ่มข้อมูลที่กำหนด <= ALL หมายถึง น้อยกว่าหรือเท่ากับค่าทุกค่าในกลุ่มข้อมูลที่กำหนด

86 ตัวอย่าง จงแสดงรายชื่ออาจารย์ที่สอนวิชาเดียวกันกับอาจารย์สิริ ศรีสมร SELECT subjectid, teacher FROM teacher WHERE subjectid = ANY (SELECT subjectid FROM teacher WHERE teacher=‘สิริ ศรีสมร); การใช้โอเปอเรเตอร์ ANY และ ALL

87 ตัวอย่าง จงแสดงชั้นเรียนที่มีจำนวนนักศึกษามากที่สุด SELECT class, COUNT(*) FROM student GROUP BY class HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM student GROUP BY class); การใช้โอเปอเรเตอร์ ANY และ ALL

88 ตัวอย่าง จงแสดงนักศึกษาที่ได้คะแนนวิชา I001 เป็นอันดับที่ 2 SELECT studentid, score FROM student_subject WHERE subjectid=‘I001’ AND score= (SELECT MAX(score) FROM student_subject WHERE subjectid=‘I001’ AND score< (SELECT MAX(score) FROM student_subject WHERE subjectid=‘I001’)); การใช้โอเปอเรเตอร์ ANY และ ALL

89 ตัวอย่าง จงแสดงนักศึกษาที่ได้คะแนนวิชา I001 เป็นอันดับที่ 3 SELECT studentid, score FROM student_subject WHERE subjectid = 'I001'AND score = ( SELECT MAX( score ) FROM student_subject WHERE subjectid = 'I001' AND score < ( SELECT MAX( score ) FROM student_subject WHERE subjectid = 'I001' AND score < ( SELECT MAX( score ) FROM student_subject WHERE subjectid= 'I001' ) ) ) การใช้โอเปอเรเตอร์ ANY และ ALL

90 SELECT studentid, score FROM student_subject WHERE score = ( SELECT MAX( score ) FROM student_subject WHERE score < ( SELECT MAX(score ) FROM student_subject)) ตัวอย่าง จงแสดงนักศึกษาที่ได้คะแนนสูงสุดเป็นอันดับที่ 2 การใช้โอเปอเรเตอร์ ANY และ ALL

91 ตัวอย่าง จงแสดงนักศึกษาที่ได้คะแนนสูงสุดเป็นอันดับที่ 3 SELECT studentid, score FROM student_subject WHERE score = ( SELECT MAX( score ) FROM student_subject WHERE score < ( SELECT MAX( score ) FROM student_subject WHERE score < (SELECT MAX( score ) FROM student_subject ) ) ) การใช้โอเปอเรเตอร์ ANY และ ALL

92 Subquery ที่อ้างถึงคอลัมน์ของ Main query จากตัวอย่างการใช้ Subquery ที่ผ่านมา การคิวรีในแต่ละชั้นจะ เปรียบเทียบหรืออ้างถึงค่าในคอลัมน์ ซึ่งมาจากตารางที่กำหนดในชั้น นั้นหรือผลมาจากการคิวรีด้วย Subquery ชั้นในกว่าอย่างเดียว แต่ใน บางครั้งการจะได้ข้อมูลที่ต้องการมา Subquery อาจจะต้องอ้างถึงค่าใน คอลัมน์ของ Outer-level query ด้วย โดยเราจะเรียกการคิวรีที่มี ลักษณะเช่นนี้ว่า Correlated Subqueries

93 ตัวอย่าง จงแสดงนักศึกษาคนใดได้คะแนนในวิชา P001 เท่ากัน บ้าง SELECT studentid, subjectid, score FROM student_subject AS s1 WHERE subjectid=‘P001’ AND score=ANY (SELECT score FROM student_subject AS s2 WHERE subjectid=‘P001’ AND s1.studentid<>s2.studentid) ORDER BY score; Subquery ที่อ้างถึงคอลัมน์ของ Main query

94 ผลลัพธ์ Subquery ที่อ้างถึงคอลัมน์ของ Main query

95 ตัวอย่าง จงแสดงนักศึกษาคนใดได้คะแนนในวิชา I001 เป็นลำดับที่ 2 SELECT studentid, score FROM student_subject AS s1 WHERE subjectid=‘I001’ AND 1= (SELECT COUNT(*) FROM student_subject AS s2 WHERE subjectid=‘I001’ AND s1.score < s2.score); Subquery ที่อ้างถึงคอลัมน์ของ Main query

96 ตัวอย่าง จงแสดงนักศึกษาคนใดบ้างที่ไม่มีชมรมสังกัด SELECT * FROM student AS s WHERE NOT EXISTS (SELECT studentid FROM club AS c WHERE s.studentid=c.studentid); Subquery ที่อ้างถึงคอลัมน์ของ Main query

97 ผลลัพธ์ Subquery ที่อ้างถึงคอลัมน์ของ Main query


ดาวน์โหลด ppt SQL (Structure Query Language) ตอนที่ 2 Online available at

งานนำเสนอที่คล้ายกัน


Ads by Google