Mysql 简明教程
MySQL - Derived Tables
MySQL Derived Tables
Derived tables 是对它们名称的完美描述:它们是从另一张 MySQL 数据库表(主表)派生的表。换句话说,派生表是从作为另一个主表 SELECT 语句的子查询给出的 SELECT 语句获得的虚拟结果集。
此表与临时表类似。但是与临时表不同,您不需要单独创建派生表;其中的记录是使用子查询从主表中检索的。因此,与实际数据库表类似,派生表也可以显示为计算、聚合函数等的。
Example
让我们看一个展示如何显示派生表的简单示例。在下面的查询中,我们正在创建一个新表 CUSTOMERS −
CREATE TABLE CUSTOMERS (
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
下面的查询向上面创建的表中插入 7 条记录 −
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );
要检索 CUSTOMERS 表的记录,请执行以下查询 −
SELECT * FROM CUSTOMERS;
CUSTOMERS 表中存在的记录如下:
现在,我们正在使用以下查询从这个 CUSTOMERS 表中检索 derived table −
SELECT ID, NAME, SALARY FROM (SELECT * FROM CUSTOMERS) AS DERIVED_CUSTOMERS;
由此获得了派生表 DERIVED_CUSTOMERS,其属性为 ID、NAME 和 SALARY。
Using WHERE Clause
我们还可以使用 WHERE 子句从派生表中过滤掉记录(或行)。以下为其语法:
SELECT column_name(s) FROM (subquery) AS derived_table_name WHERE [condition];
Aliasing a Column in Derived Table
在派生表中,我们不仅可以指定表名,还可以指定别名,在显示内容时对列名进行别名化。以下为语法:
SELECT column_name(s) AS alias_name(s) FROM (subquery) AS derived_table_name;
Displaying Aggregate Functions as Derived Tables
我们还可以将对主表记录执行的聚合函数或计算的结果显示为派生表。
以下为将聚合函数显示为派生表的语法:
SELECT function_name() FROM (subquery) AS derived_table_name;
Example
在以下查询中,我们使用聚合函数 SUM() 计算 CUSTOMERS 表的总薪酬:
SELECT SUM(SALARY) FROM (SELECT SALARY FROM CUSTOMERS) AS DERIVED_CUSTOMERS;