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

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

การสอบถามข้อมูลแบบซ้อนกัน

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


งานนำเสนอเรื่อง: "การสอบถามข้อมูลแบบซ้อนกัน"— ใบสำเนางานนำเสนอ:

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


ดาวน์โหลด ppt การสอบถามข้อมูลแบบซ้อนกัน

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


Ads by Google