与 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)