Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách lồng truy vấn con bên trong truy vấn con khác (Nested Subquery) trong MySQL


Nếu subquery lồng bên trong subquery khác gọi là Nested Subquery.

Ví dụ

Dữ liệu từ Cars, Customers, Reservations:

mysql> Select * from Cars;
+------+--------------+---------+
| ID   | Name         | Price   |
+------+--------------+---------+
|    1 | Nexa         |  750000 |
|    2 | Maruti Swift |  450000 |
|    3 | BMW          | 4450000 |
|    4 | VOLVO        | 2250000 |
|    5 | Alto         |  250000 |
|    6 | Skoda        | 1250000 |
|    7 | Toyota       | 2400000 |
|    8 | Ford         | 1100000 |
+------+--------------+---------+

mysql> Select * from Customers;
+-------------+----------+
| Customer_Id | Name     |
+-------------+----------+
|           1 | Rahul    |
|           2 | Yashpal  |
|           3 | Gaurav   |
|           4 | Virender |
+-------------+----------+

mysql> Select * from Reservations;
+------+-------------+------------+
| ID   | Customer_id | Day        |
+------+-------------+------------+
|    1 |           1 | 2017-12-30 |
|    2 |           2 | 2017-12-28 |
|    3 |           2 | 2017-12-29 |
|    4 |           1 | 2017-12-25 |
|    5 |           3 | 2017-12-26 |
+------+-------------+------------+

Nested subquery (3 cấp):

mysql> Select * from Customers 
    where customer_id IN 
    (Select Customer_id from reservations 
     where id = (Select id from cars WHERE name = 'BMW'));
+-------------+---------+
| Customer_Id | Name    |
+-------------+---------+
|           2 | Yashpal |
+-------------+---------+
1 row in set (0.00 sec)

Giải thích thứ tự thực thi:

  1. Cấp sâu nhất: Select id from cars WHERE name = 'BMW' → trả về ID = 3
  2. Cấp giữa: Select Customer_id from reservations where id = 3 → trả về Customer_id = 2
  3. Cấp ngoài: Select * from Customers where customer_id IN (2) → trả về Yashpal