ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
ได้พิมพ์โดยSampan Terdsak ได้เปลี่ยน 9 ปีที่แล้ว
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
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.