ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
การสอบถามข้อมูลแบบซ้อนกัน
CHARPTER 8 การสอบถามข้อมูลแบบซ้อนกัน SELECT … SELECT
2
สาระการเรียนรู้ เพื่อศึกษาการใช้ Query ซ้อน Query เพื่อให้สะดวกต่อการสอบถาม เงื่อนไขแบบซับซ้อน
3
สอบถามข้อมูลแบบซ้อนกัน
SQL มีโครงสร้างที่ทำหน้าให้ผู้ใช้สามารถสอบถามข้อมูลได้ละเอียด มากขึ้น โดยสามารถสอบถามข้อมูลซ้อนคำสั่งสอบถามได้ เรียกว่า การสอบถาม แบบซ้อนกัน หรือ “Subquery” หลักการของการสอบถามข้อมูลแบบซ้อนกัน คือ ผลลัพธ์จากการสอบถามย่อย (subquery) จะส่งต่อไปยังคำสั่งสอบถามหลักซึ่งอยู่ในระดับถัดขึ้นไป (main query)
4
รูปแบบของคำสั่ง รูปแบบทั่วไปของ Query และ Subquery แสดงได้ดังนี้
SELECT <column-name(s)> (main Query) การสอบถามระดับแม่ FROM <table-name>; Where <condition> (SELECT <column-name> …(Subquery) การสอบถามระดับลูก FROM <table-name> [WHERE <condition>]);
5
นักษาที่มีจำนวนสมาชิกเท่ากับ 3 คน และอยู่ชมรมอะไรบ้าง
ตัวอย่าง 7-1 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล นักษาที่มีจำนวนสมาชิกเท่ากับ 3 คน และอยู่ชมรมอะไรบ้าง ใช้ความรู้พื้นฐานในการสอบถามข้อมูล ต้องทำการสอบถามข้อมูล 2 ขั้นตอนคือ ขั้นตอนที่ 1 ทำการแสดงชื่อชมรมที่มีจำนวนสมาชิกเท่ากับ 3 SELECT club from club group by club having count(*)=3; ผลลัพธ์
6
ขั้นตอนที่ 2 นำผลลัพธ์ที่ได้จากขั้นตอนที่ 1 ทราบว่ามีทั้งหมด 3 ชมได้แก่ นิทรรศการ,
แนะแนวการศึกษา, ลีลาศ จากนั้นอยากทราบว่า นศ. รหัสไหน สังกัดชมรมอะไรบ้าง โดย SELECT studentid,club from club where club='ลีลาศ'; ผลลัพธ์
7
ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย
SELECT studentid,club from club where club in (select club group by club having count(*)=3); ผลลัพธ์
8
ตัวอย่างการใช้ ANY =ANY หมายถึง เท่ากับค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด (ความหมายเดียวกับการใช้ IN) > ANY หมายถึง มากกว่าค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด < ANY หมายถึง น้อยกว่าค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด < >ALL หมายถึง ไม่เท่ากับค่าทุกค่าในกลุ่มข้อมูลที่กำหนด (ความหมายเดียวกับการใช้ NOT IN) >=ALL หมายถึง มากกว่าหรือเท่ากับทุกค่าในกลุ่มข้อมูลที่กำหนด <=ALL หมายถึง น้อยกว่าหรือเท่ากับค่าทุกค่าในกลุ่มข้อมูลที่กำหนด
9
รายวิชากับอาจารย์ที่สอนแต่ละวิชาเป็นใครบ้าง
ตัวอย่าง 7-2 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล รายวิชากับอาจารย์ที่สอนแต่ละวิชาเป็นใครบ้าง ขั้นตอนที่ 1 ทำการแสดงรายวิชาในรายวิชาชื่ออาจารย์สอนเช่นอ.สิริ select subjectid from teacher where teacher = 'สิริ ศรีสมร'; ผลลัพธ์
10
จากนั้นแสดงชื่ออาจารย์และรายวิชาที่อาจารย์สอน
ขั้นตอนที่ 2 นำผลลัพธ์ที่ได้จากขั้นตอนที่ 1 ทราบว่ามีทรายวิชาไหนบ้างจากจากนั้น จากนั้นแสดงชื่ออาจารย์และรายวิชาที่อาจารย์สอน select subjectid, teacher from teacher where subjectid ผลลัพธ์
11
ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย
select subjectid, teacher from teacher where subjectid = any (select subjectid where teacher='สิริ ศรีสมร'); ผลลัพธ์
12
หาชั้นเรียนที่มีจำนวนนักศึกษามากที่สุด
ตัวอย่าง 7-3 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล หาชั้นเรียนที่มีจำนวนนักศึกษามากที่สุด ขั้นตอนที่ 1 ทำการนับจำนวนนักศึกษาทั้งหมดในแต่ละ Class select count(*) from student group by class; ผลลัพธ์
13
ขั้นตอนที่ 2 ทำการนับจำนวน class ทั้งหมด
select class,count(*) from student group by class ผลลัพธ์
14
ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย
select class,count(*) from student group by class having count(*) >=ALL (select count(*) group by class); ผลลัพธ์
15
นักศึกษาที่ได้คะแนนวิชา I001 เป็นอันดับ 2
ตัวอย่าง 7-4 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล นักศึกษาที่ได้คะแนนวิชา I001 เป็นอันดับ 2 ขั้นตอนที่ 1 ทำการหาค่าคะแนนสูงสุด ในรายวิชา I001 select max(score) from student_subject where subjectid='I001' ผลลัพธ์
16
ขั้นตอนที่ 2 ทำการตัดแถวคะแนนนักศึกษาที่มีค่าสูงสุดออก
ขั้นตอนที่ 2 ทำการตัดแถวคะแนนนักศึกษาที่มีค่าสูงสุดออก select max(score) from student_subject where subjectid='I001' and score < ขั้นตอนที่ 3 แสดงรหัสนักศึกษาและคะแนนนักศึกษาได้คะแนนในวิชา I001 select studentid,score from student_subject where subjectid='I001'
17
ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย
select studentid,score from student_subject where subjectid='I001' and score= (select max(score) where subjectid='I001' and score < where subjectid='I001')); ผลลัพธ์
18
Subquery ที่อ้างถึงคอลัมน์ของ Main Query
ตัวอย่าง 7-5 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล นักศึกษาคนใดได้คะแนนในวิชา 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; ผลลัพธ์
19
ตัวอย่าง 7-6 นักศึกษาคนใดบ้างที่ไม่มีชมรมสังกัด
ตัวอย่าง 7-6 นักศึกษาคนใดบ้างที่ไม่มีชมรมสังกัด select * from student as s where NOT EXISTS (SELECT studentid from club AS c where s.studentid=c.studentid); ผลลัพธ์
20
การ UNION Club_TBL Club_TBL ผลลัพธ์จากการ UNION
21
การ UNION
22
ตัวอย่าง 7-7 นักศึกษาสังกัดชมรม
ตัวอย่าง 7-7 นักศึกษาสังกัดชมรม SELECT studentid,club from club where club='คอมพิวเตอร์' union where club='ภาษาอังกฤษ'; ผลลัพธ์
23
สรุปท้ายบทเรียน คำสั่ง SELECT มีรูปแบบการใช้งานที่หลากหลาย ในการค้นหาข้อมูลที่ต้องการแต่ละครั้งอาจจะใช้คำสั่ง SELECT ที่มีประโยคคำสั่งต่าง ๆ เพื่อทำความเข้าใจกับลำดับการทำงานจริงเมื่อมีการคิวรีเกิดขึ้นด้วย สรุปรูปแบบคำสั่ง SELECT Syntax select [build-in function] column_list FROM table_name [WHERE row_condition] [GROUP BY column_list] [HAVING group_condition] [ORDER BY column_list];
24
ลำดับที่ 1 : ทำงานตามประโยค FROM
FROM student_subject WHERE score IS NOT NULL GROUP BY subjectid HAVING AVG(score)>50 SELECT subjectid, AVG(score) ORDER BY 2
25
THE END
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.