Khi subquery bắt đầu ở mệnh đề FROM, tập kết quả tạo ra gọi là Derived Table (bảng dẫn xuất). Loại subquery này gọi là Materialized Subquery.
Ví dụ
Dữ liệu bảng cars:
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 | +------+--------------+---------+
Truy vấn tạo derived table:
mysql> Select AVG(P) FROM
(SELECT Name, SUM(Price) P FROM cars GROUP BY Name) AS totals;
+--------------+
| AVG(P) |
+--------------+
| 1612500.0000 |
+--------------+
1 row in set (0.76 sec)
Giải thích:
- Bảng dẫn xuất
totalschứa tổng giá mỗi loại xe - Truy vấn ngoài tính trung bình của cột
P - Bắt buộc đặt alias cho derived table (ở đây là
AS totals)
Chạy riêng subquery để xem derived table:
mysql> SELECT Name, SUM(Price) P FROM cars GROUP BY Name; +--------------+---------+ | Name | P | +--------------+---------+ | Alto | 250000 | | BMW | 4450000 | | Ford | 1100000 | | Maruti Swift | 450000 | | Nexa | 750000 | | Skoda | 1250000 | | Toyota | 2400000 | | VOLVO | 2250000 | +--------------+---------+