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

Khái niệm bảng dẫn xuất (Derived Table) trong subquery MySQL


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 totals chứ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 |
+--------------+---------+