MySQL บทช่วยสอน SubQuery พร้อมตัวอย่าง

คำถามย่อยคืออะไร?

แบบสอบถามย่อยคือแบบสอบถามแบบใช้เลือกข้อมูลที่มีอยู่ภายในแบบสอบถามอื่น โดยทั่วไปแบบสอบถามแบบใช้เลือกข้อมูลภายในใช้เพื่อกำหนดผลลัพธ์ของแบบสอบถามแบบใช้เลือกข้อมูลภายนอก

ลองดูไวยากรณ์ของแบบสอบถามย่อย –

MySQL แบบสอบถามย่อย

ข้อร้องเรียนจากลูกค้าทั่วไปที่ MyFlix Video Library คือเรื่องจำนวนภาพยนตร์น้อย ฝ่ายบริหารต้องการซื้อภาพยนตร์ประเภทที่มีจำนวนเรื่องน้อยที่สุด

คุณสามารถใช้แบบสอบถามเช่น

SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);

มันให้ผลลัพธ์

MySQL แบบสอบถามย่อย

มาดูกันว่าแบบสอบถามนี้ทำงานอย่างไร

MySQL แบบสอบถามย่อย

ข้างต้นเป็นรูปแบบของ แถวแบบสอบถามย่อยในแบบสอบถามย่อยดังกล่าว แบบสอบถามภายในสามารถให้ผลลัพธ์ได้เพียงหนึ่งผลลัพธ์เท่านั้น ตัวดำเนินการที่อนุญาตเมื่อทำงานกับแบบสอบถามย่อยแถวคือ [=, >, =, <=, ,!=, ]

ลองดูอีกตัวอย่างหนึ่ง

สมมติว่าคุณต้องการชื่อและหมายเลขโทรศัพท์ของสมาชิกที่เช่าภาพยนตร์และยังไม่ได้ส่งคืน เมื่อคุณได้รับชื่อและหมายเลขโทรศัพท์แล้ว ให้โทรติดต่อพวกเขาเพื่อเตือนความจำ คุณสามารถใช้แบบสอบถามเช่น

SELECT full_names,contact_number FROM   members  WHERE  membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );


MySQL แบบสอบถามย่อย

มาดูกันว่าแบบสอบถามนี้ทำงานอย่างไร

MySQL แบบสอบถามย่อย

ในกรณีนี้ แบบสอบถามภายในจะส่งกลับผลลัพธ์มากกว่าหนึ่งรายการ ข้างต้นเป็นประเภท Tสามารถสอบถามย่อยได้y.

จนถึงตอนนี้เราได้เห็นคำถามสองข้อแล้ว มาดูตัวอย่างกัน แบบสอบถามสาม!!!

สมมติว่าฝ่ายบริหารต้องการให้รางวัลแก่สมาชิกที่จ่ายเงินสูงสุด

เราสามารถเรียกใช้แบบสอบถามเช่น

Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));

แบบสอบถามด้านบนให้ผลลัพธ์ดังต่อไปนี้ –

MySQL แบบสอบถามย่อย

แบบสอบถามย่อย Vs เข้าร่วม!

เมื่อเปรียบเทียบกับ Joins แบบสอบถามย่อยนั้นใช้งานง่ายและอ่านง่าย พวกมันไม่ซับซ้อนเท่า ร่วม

จึงมีการใช้งานบ่อยครั้งโดย ผู้เริ่มต้น SQL.

แต่แบบสอบถามย่อยมีปัญหาด้านประสิทธิภาพ การใช้การรวมแทนแบบสอบถามย่อยในบางครั้งสามารถเพิ่มประสิทธิภาพให้คุณได้มากถึง 500 เท่า

เมื่อเลือกตัวเลือกแล้ว ขอแนะนำให้ใช้ JOIN เหนือแบบสอบถามย่อย


ควรใช้ซับคิวรีเป็นโซลูชันสำรองเฉพาะเมื่อคุณไม่สามารถใช้การดำเนินการ JOIN เพื่อให้บรรลุสิ่งที่กล่าวมาข้างต้นได้

แบบสอบถามย่อยเทียบกับการรวม

สรุป

  • แบบสอบถามย่อยเป็นแบบสอบถามที่ฝังอยู่ภายในแบบสอบถามอื่น คิวรีแบบฝังเรียกว่าคิวรีภายใน และคิวรีคอนเทนเนอร์เรียกว่าคิวรีภายนอก
  • แบบสอบถามย่อยใช้งานง่าย ให้ความยืดหยุ่นสูง และสามารถแยกย่อยออกเป็นองค์ประกอบเชิงตรรกะเดี่ยวๆ ที่สร้างแบบสอบถามซึ่งมีประโยชน์มากเมื่อ การทดสอบ และแก้ไขคำถาม
  • MySQL รองรับแบบสอบถามย่อยสามประเภท ได้แก่ สเกลาร์ แถว และแบบสอบถามย่อยตาราง
  • แบบสอบถามย่อยแบบสเกลาร์ส่งคืนเฉพาะแถวเดียวและคอลัมน์เดียวเท่านั้น
  • คิวรีย่อยของแถวจะส่งกลับเพียงแถวเดียวแต่สามารถมีได้มากกว่าหนึ่งคอลัมน์
  • แบบสอบถามย่อยของตารางสามารถส่งคืนหลายแถวและคอลัมน์ได้
  • แบบสอบถามย่อยยังสามารถใช้ในแบบสอบถาม INSERT, UPDATE และ DELETE
  • สำหรับปัญหาด้านประสิทธิภาพ เมื่อต้องรับข้อมูลจากหลายตาราง ขอแนะนำอย่างยิ่งให้ใช้ JOIN แทนซับเควรี ควรใช้ซับเควรีเฉพาะเมื่อมีเหตุผลที่ดีเท่านั้น