Subquery คือ Query ภายใน Query อีกตัวหนึ่ง ช่วยให้เขียน Query เลือกข้อมูลด้วยเกณฑ์ที่กำหนดระหว่างรันไทม์ อย่างเป็นทางการคือการใช้ SELECT ภายใน Clause ของ SELECT อีกตัว Subquery สามารถซ้อนได้หลายชั้น และวางได้ใน INSERT, UPDATE, DELETE ต้องอยู่ในวงเล็บ
Subquery ใช้ได้ทุกที่ที่อนุญาต Expression ถ้าคืนค่าเดียว ใช้ใน FROM Clause ได้ เรียกว่า Inline View (Virtual Table) วางได้ใน FROM, WHERE, HAVING เรียกว่า Inner Query Query ภายนอกคือ Outer Query
ประเภทหลัก 3 ประเภท
1. Scalar Subquery
คืนค่าเดียว (1 แถว 1 คอลัมน์) ใช้ได้เกือบทุกที่ที่วาง Literal ได้ ตัวอย่าง:
mysql> Select Name from Customers WHERE Customer_id = (Select Customer_id FROM Reservations WHERE ID = 5); +--------+ | Name | +--------+ | Gaurav | +--------+ 1 row in set (0.06 sec)
2. Table Subquery
คืนผลลัพธ์ 1 แถวขึ้นไป หลายคอลัมน์ ตัวอย่าง:
mysql> Select Name from customers where Customer_id IN (SELECT DISTINCT Customer_id from reservations); +---------+ | Name | +---------+ | Rahul | | Yashpal | | Gaurav | +---------+ 3 rows in set (0.05 sec)
3. Correlated Subquery
Subquery ที่อ้างอิงค่าจาก Outer Query ใน WHERE Clause ตัวอย่าง:
mysql> Select Name from cars WHERE Price < (SELECT AVG(Price) from Cars); +--------------+ | Name | +--------------+ | Nexa | | Maruti Swift | | Alto | | Skoda | | Ford | +--------------+ 5 rows in set (0.00 sec) mysql> Select Name from cars WHERE Price > (SELECT AVG(Price) from Cars); +--------+ | Name | +--------+ | BMW | | VOLVO | | Toyota | +--------+ 3 rows in set (0.00 sec)