与 MySQL 子查询有关的派生表概念是什么?

mysqlmysqli database

实际上,当 MySQL 子查询从 FROM 子句开始时,生成的结果集称为派生表。生成派生表的此类子查询称为物化子查询。可以借助以下使用"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 |
+------+--------------+---------+
8 rows in set (0.02 sec)

现在,以下查询将生成一个派生表 −

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)

上述派生表返回每辆车的总价格,然后外部查询返回平均值。

我们必须为所有派生表提供别名。在本例中,我们为派生表提供了 totals 的别名。

如果我们只运行子查询,我们可以看到派生表 −

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 |
+--------------+---------+
8 rows in set (0.03 sec)

相关文章