MySQL บทช่วยสอน SubQuery พร้อมตัวอย่าง
คำถามย่อยคืออะไร?
แบบสอบถามย่อยคือแบบสอบถามแบบใช้เลือกข้อมูลที่มีอยู่ภายในแบบสอบถามอื่น โดยทั่วไปแบบสอบถามแบบใช้เลือกข้อมูลภายในใช้เพื่อกำหนดผลลัพธ์ของแบบสอบถามแบบใช้เลือกข้อมูลภายนอก
ลองดูไวยากรณ์ของแบบสอบถามย่อย –
ข้อร้องเรียนจากลูกค้าทั่วไปที่ MyFlix Video Library คือเรื่องจำนวนภาพยนตร์น้อย ฝ่ายบริหารต้องการซื้อภาพยนตร์ประเภทที่มีจำนวนเรื่องน้อยที่สุด
คุณสามารถใช้แบบสอบถามเช่น
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
มันให้ผลลัพธ์
มาดูกันว่าแบบสอบถามนี้ทำงานอย่างไร
ข้างต้นเป็นรูปแบบของ แถวแบบสอบถามย่อยในแบบสอบถามย่อยดังกล่าว แบบสอบถามภายในสามารถให้ผลลัพธ์ได้เพียงหนึ่งผลลัพธ์เท่านั้น ตัวดำเนินการที่อนุญาตเมื่อทำงานกับแบบสอบถามย่อยแถวคือ [=, >, =, <=, ,!=, ]
ลองดูอีกตัวอย่างหนึ่ง
สมมติว่าคุณต้องการชื่อและหมายเลขโทรศัพท์ของสมาชิกที่เช่าภาพยนตร์และยังไม่ได้ส่งคืน เมื่อคุณได้รับชื่อและหมายเลขโทรศัพท์แล้ว ให้โทรติดต่อพวกเขาเพื่อเตือนความจำ คุณสามารถใช้แบบสอบถามเช่น
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
มาดูกันว่าแบบสอบถามนี้ทำงานอย่างไร
ในกรณีนี้ แบบสอบถามภายในจะส่งกลับผลลัพธ์มากกว่าหนึ่งรายการ ข้างต้นเป็นประเภท Tสามารถสอบถามย่อยได้y.
จนถึงตอนนี้เราได้เห็นคำถามสองข้อแล้ว มาดูตัวอย่างกัน แบบสอบถามสาม!!!
สมมติว่าฝ่ายบริหารต้องการให้รางวัลแก่สมาชิกที่จ่ายเงินสูงสุด
เราสามารถเรียกใช้แบบสอบถามเช่น
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
แบบสอบถามด้านบนให้ผลลัพธ์ดังต่อไปนี้ –
แบบสอบถามย่อย Vs เข้าร่วม!
เมื่อเปรียบเทียบกับ Joins แบบสอบถามย่อยนั้นใช้งานง่ายและอ่านง่าย พวกมันไม่ซับซ้อนเท่า ร่วม
จึงมีการใช้งานบ่อยครั้งโดย ผู้เริ่มต้น SQL.
แต่แบบสอบถามย่อยมีปัญหาด้านประสิทธิภาพ การใช้การรวมแทนแบบสอบถามย่อยในบางครั้งสามารถเพิ่มประสิทธิภาพให้คุณได้มากถึง 500 เท่า
เมื่อเลือกตัวเลือกแล้ว ขอแนะนำให้ใช้ JOIN เหนือแบบสอบถามย่อย
ควรใช้ซับคิวรีเป็นโซลูชันสำรองเฉพาะเมื่อคุณไม่สามารถใช้การดำเนินการ JOIN เพื่อให้บรรลุสิ่งที่กล่าวมาข้างต้นได้
สรุป
- แบบสอบถามย่อยเป็นแบบสอบถามที่ฝังอยู่ภายในแบบสอบถามอื่น คิวรีแบบฝังเรียกว่าคิวรีภายใน และคิวรีคอนเทนเนอร์เรียกว่าคิวรีภายนอก
- แบบสอบถามย่อยใช้งานง่าย ให้ความยืดหยุ่นสูง และสามารถแยกย่อยออกเป็นองค์ประกอบเชิงตรรกะเดี่ยวๆ ที่สร้างแบบสอบถามซึ่งมีประโยชน์มากเมื่อ การทดสอบ และแก้ไขคำถาม
- MySQL รองรับแบบสอบถามย่อยสามประเภท ได้แก่ สเกลาร์ แถว และแบบสอบถามย่อยตาราง
- แบบสอบถามย่อยแบบสเกลาร์ส่งคืนเฉพาะแถวเดียวและคอลัมน์เดียวเท่านั้น
- คิวรีย่อยของแถวจะส่งกลับเพียงแถวเดียวแต่สามารถมีได้มากกว่าหนึ่งคอลัมน์
- แบบสอบถามย่อยของตารางสามารถส่งคืนหลายแถวและคอลัมน์ได้
- แบบสอบถามย่อยยังสามารถใช้ในแบบสอบถาม INSERT, UPDATE และ DELETE
- สำหรับปัญหาด้านประสิทธิภาพ เมื่อต้องรับข้อมูลจากหลายตาราง ขอแนะนำอย่างยิ่งให้ใช้ JOIN แทนซับเควรี ควรใช้ซับเควรีเฉพาะเมื่อมีเหตุผลที่ดีเท่านั้น