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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
UPDATING DATA By SQL (SA&D-9)
Advertisements

เสรี ชิโนดม MS SQLServer 7 เสรี ชิโนดม
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
กลุ่มคำสั่ง SQL สามารถแบ่งได้ดังนี้
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
เนื้อหา 1. สืบค้นข้อมูลจากหนึ่งตาราง
Lecture 10: อาร์เรย์หนึ่งมิติ
Security and Integrity
คำสั่งแบบเลือกทำ Week 6.
Microsoft Access.
Microsoft Access.
ภาษามาตรฐานสำหรับนิยามข้อมูล และการใช้ข้อมูล
บทที่ 5 การสอบถามข้อมูลด้วยฟังก์ชั่น สำหรับการคำนวณทางคณิตศาสตร์
MySQL.
SQL - Structured Query Language
Structured Query Language (SQL) (2)
บทที่ 3 แบบจำลองข้อมูล Data Models Calculus
ภาษามาตรฐานสำหรับนิยามข้อมูล และการใช้ข้อมูล
Chapter 8 : การควบคุมความปลอดภัย (Security Control)
การสืบค้นสารสนเทศขั้นสูง (Advanced Information Retrieval)
การสืบค้นสารสนเทศขั้นสูง (Advanced Information Retrieval)
แก้ไขข้อมูลที่ไม่สามารถกรอกเป็นภาษาไทยได้
โปรแกรม Microsoft Access
Search Engine อ. กฤษฎา ศักดิ์คำดวง.
Database Programming Exceed Camp #2 24 October 2005.
ความปลอดภัยของฐานข้อมูล
ฐานข้อมูลเชิงสัมพันธ์
Creating Database With Structure Query Language (SA&D-8)
ค้นหาข้อมูลที่ต้องการจากฐานข้อมูล (SA&D-10)
Chapter V : แสดงรายการจากฐานข้อมูล
โปรแกรมภาษาจาวาเบื้องต้น Basic Java Programming 3(2-2-5)
SQL Structured Query Language.
การสอบถามข้อมูลด้วยฟังก์ชั่นสำหรับ
CHARPTER 4 การสอบถามข้อมูลแบบมีเงื่อนไข
CHARPTER 3 การสอบถามข้อมูลพื้นฐาน
CHARPTER 9 การเชื่อมเทเบิล JOIN…. TABLE.
SQL เพื่อควบคุมความปลอดภัย (Week 2). การควบคุมการเข้าถึงข้อมูล ระบบการจัดการข้อมูลโดยส่วนใหญ่จะมีกลไกที่ ทำให้แน่ใจได้ว่าเฉพาะผู้มีสิทธิเท่านั้นที่ สามารถเข้าถึงข้อมูลในฐานข้อมูล.
การเขียนแมโคร 1. การทำstartup แสดงหน้าแรก 2. แมโครแสดงการสืบค้น
เรื่องการออกแบบฐานข้อมูล
Computer Programming for Engineers
การวิเคราะห์เนื้อหา.
2.3.1 รหัสเทียม (Pseudo code)
โปรแกรม Microsoft Access
การใช้ PHP ติดต่อฐานข้อมูลMySQL
: Introduction to DATABASE (ฐานข้อมูลเบื้องต้น)
โปรแกรมฐานข้อมูลที่นิยมใช้
SML Report Designer การออกแบบรายงาน.
CHAPTER 12 SQL.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Introduction to PHP, MySQL – Special Problem (Database)
SQL Structured Query Language.
หลักการเขียนโปรแกรม ( )
SQL (Structure Query Language) ตอนที่ 2 Online available at
ชื่อเรื่อง การแก้ปัญหานักศึกษาสอบไม่ผ่านเกณฑ์ในรายวิชา โครงสร้างข้อมูลและอัลกอริทึ่มของนักศึกษาปวส. 1/2 วิทยาลัยอาชีวศึกษาบริหารธุรกิจสงขลา โดยใช้วิธีการสอนแบบร่วมมือ.
SQL - Structure Query Language (Part 2) ภาษามาตรฐานสำหรับนิยาม ข้อมูลและการใช้ข้อมูล A ระบบจัดการฐานข้อมูล 3(2-2) อ. ชนิดา คำเพ็ง สาขาวิชาเทคโนโลยีสารสนเทศ.
เรื่อง การพัฒนาบทเรียนคอมพิวเตอร์ช่วยสอน วิชาการใช้โปรแกรมกราฟิก
SQL (Structure Query Language) ตอนที่ 1
วิทยาลัยเทคโนโลยีพณิชยการเชียงใหม่ วิทยาลัยเทคโนโลยีพณิชยการเชียงใหม่
Introduction to SQL - 3 (MySQL) – Special Problem (Database)
การสร้างสื่อ e-Learning
Introduction to SQL (MySQL) – Special Problem (Database)
PHP: [9] ฐานข้อมูล MYSQL
Lecture 5 SQL (Structured Query Language)
1 Introduction to SQL กนกวรรธน์ เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร วิทยาเขต สารสนเทศพะเยา.
ประเภทของคำสั่งของภาษา SQL
Database Design & Development
ภาษา SQL (Structured Query Language)
Chapter 9 : ภาษาทางด้านฐานข้อมูลคำสั่ง SQL (SQL Command)
SQL – Web Programming and Web Database
ใบสำเนางานนำเสนอ:

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

สาระการเรียนรู้ เพื่อศึกษาการใช้ Query ซ้อน Query เพื่อให้สะดวกต่อการสอบถาม เงื่อนไขแบบซับซ้อน

สอบถามข้อมูลแบบซ้อนกัน SQL มีโครงสร้างที่ทำหน้าให้ผู้ใช้สามารถสอบถามข้อมูลได้ละเอียด มากขึ้น โดยสามารถสอบถามข้อมูลซ้อนคำสั่งสอบถามได้ เรียกว่า การสอบถาม แบบซ้อนกัน หรือ “Subquery” หลักการของการสอบถามข้อมูลแบบซ้อนกัน คือ ผลลัพธ์จากการสอบถามย่อย (subquery) จะส่งต่อไปยังคำสั่งสอบถามหลักซึ่งอยู่ในระดับถัดขึ้นไป (main query)

รูปแบบของคำสั่ง รูปแบบทั่วไปของ Query และ Subquery แสดงได้ดังนี้ SELECT <column-name(s)> (main Query) การสอบถามระดับแม่ FROM <table-name>; Where <condition> (SELECT <column-name> …(Subquery) การสอบถามระดับลูก FROM <table-name> [WHERE <condition>]);

นักษาที่มีจำนวนสมาชิกเท่ากับ 3 คน และอยู่ชมรมอะไรบ้าง ตัวอย่าง 7-1 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล นักษาที่มีจำนวนสมาชิกเท่ากับ 3 คน และอยู่ชมรมอะไรบ้าง ใช้ความรู้พื้นฐานในการสอบถามข้อมูล ต้องทำการสอบถามข้อมูล 2 ขั้นตอนคือ ขั้นตอนที่ 1 ทำการแสดงชื่อชมรมที่มีจำนวนสมาชิกเท่ากับ 3 SELECT club from club group by club having count(*)=3; ผลลัพธ์

ขั้นตอนที่ 2 นำผลลัพธ์ที่ได้จากขั้นตอนที่ 1 ทราบว่ามีทั้งหมด 3 ชมได้แก่ นิทรรศการ, แนะแนวการศึกษา, ลีลาศ จากนั้นอยากทราบว่า นศ. รหัสไหน สังกัดชมรมอะไรบ้าง โดย SELECT studentid,club from club where club='ลีลาศ'; ผลลัพธ์

ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย SELECT studentid,club from club where club in (select club group by club having count(*)=3); ผลลัพธ์

ตัวอย่างการใช้ ANY =ANY หมายถึง เท่ากับค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด (ความหมายเดียวกับการใช้ IN) > ANY หมายถึง มากกว่าค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด < ANY หมายถึง น้อยกว่าค่าใดค่าหนึ่งในกลุ่มข้อมูลที่กำหนด < >ALL หมายถึง ไม่เท่ากับค่าทุกค่าในกลุ่มข้อมูลที่กำหนด (ความหมายเดียวกับการใช้ NOT IN) >=ALL หมายถึง มากกว่าหรือเท่ากับทุกค่าในกลุ่มข้อมูลที่กำหนด <=ALL หมายถึง น้อยกว่าหรือเท่ากับค่าทุกค่าในกลุ่มข้อมูลที่กำหนด

รายวิชากับอาจารย์ที่สอนแต่ละวิชาเป็นใครบ้าง ตัวอย่าง 7-2 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล รายวิชากับอาจารย์ที่สอนแต่ละวิชาเป็นใครบ้าง ขั้นตอนที่ 1 ทำการแสดงรายวิชาในรายวิชาชื่ออาจารย์สอนเช่นอ.สิริ select subjectid from teacher where teacher = 'สิริ ศรีสมร'; ผลลัพธ์

จากนั้นแสดงชื่ออาจารย์และรายวิชาที่อาจารย์สอน ขั้นตอนที่ 2 นำผลลัพธ์ที่ได้จากขั้นตอนที่ 1 ทราบว่ามีทรายวิชาไหนบ้างจากจากนั้น จากนั้นแสดงชื่ออาจารย์และรายวิชาที่อาจารย์สอน select subjectid, teacher from teacher where subjectid ผลลัพธ์

ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย select subjectid, teacher from teacher where subjectid = any (select subjectid where teacher='สิริ ศรีสมร'); ผลลัพธ์

หาชั้นเรียนที่มีจำนวนนักศึกษามากที่สุด ตัวอย่าง 7-3 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล หาชั้นเรียนที่มีจำนวนนักศึกษามากที่สุด ขั้นตอนที่ 1 ทำการนับจำนวนนักศึกษาทั้งหมดในแต่ละ Class select count(*) from student group by class; ผลลัพธ์

ขั้นตอนที่ 2 ทำการนับจำนวน class ทั้งหมด select class,count(*) from student group by class ผลลัพธ์

ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย select class,count(*) from student group by class having count(*) >=ALL (select count(*) group by class); ผลลัพธ์

นักศึกษาที่ได้คะแนนวิชา I001 เป็นอันดับ 2 ตัวอย่าง 7-4 จงทำการสอบถามข้อมูลจาก Database School เพื่อต้องการทราบข้อมูล นักศึกษาที่ได้คะแนนวิชา I001 เป็นอันดับ 2 ขั้นตอนที่ 1 ทำการหาค่าคะแนนสูงสุด ในรายวิชา I001 select max(score) from student_subject where subjectid='I001' ผลลัพธ์

ขั้นตอนที่ 2 ทำการตัดแถวคะแนนนักศึกษาที่มีค่าสูงสุดออก ขั้นตอนที่ 2 ทำการตัดแถวคะแนนนักศึกษาที่มีค่าสูงสุดออก select max(score) from student_subject where subjectid='I001' and score < ขั้นตอนที่ 3 แสดงรหัสนักศึกษาและคะแนนนักศึกษาได้คะแนนในวิชา I001 select studentid,score from student_subject where subjectid='I001'

ขั้นตอนที่ 3 ทำการ Subquery ซ้อนกันโดย select studentid,score from student_subject where subjectid='I001' and score= (select max(score) where subjectid='I001' and score < where subjectid='I001')); ผลลัพธ์

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; ผลลัพธ์

ตัวอย่าง 7-6 นักศึกษาคนใดบ้างที่ไม่มีชมรมสังกัด ตัวอย่าง 7-6 นักศึกษาคนใดบ้างที่ไม่มีชมรมสังกัด select * from student as s where NOT EXISTS (SELECT studentid from club AS c where s.studentid=c.studentid); ผลลัพธ์

การ UNION Club_TBL Club_TBL ผลลัพธ์จากการ UNION

การ UNION

ตัวอย่าง 7-7 นักศึกษาสังกัดชมรม ตัวอย่าง 7-7 นักศึกษาสังกัดชมรม SELECT studentid,club from club where club='คอมพิวเตอร์' union where club='ภาษาอังกฤษ'; ผลลัพธ์

สรุปท้ายบทเรียน คำสั่ง 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];

ลำดับที่ 1 : ทำงานตามประโยค FROM FROM student_subject WHERE score IS NOT NULL GROUP BY subjectid HAVING AVG(score)>50 SELECT subjectid, AVG(score) ORDER BY 2

THE END