Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL Subquery คืออะไร และมีประเภทหลักกี่ประเภท


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)