Mysql 简明教程

MySQL - Derived Tables

MySQL Derived Tables

Derived tables 是对它们名称的完美描述:它们是从另一张 MySQL 数据库表(主表)派生的表。换句话说,派生表是从作为另一个主表 SELECT 语句的子查询给出的 SELECT 语句获得的虚拟结果集。

此表与临时表类似。但是与临时表不同,您不需要单独创建派生表;其中的记录是使用子查询从主表中检索的。因此,与实际数据库表类似,派生表也可以显示为计算、聚合函数等的。

Syntax

以下是在 MySQL 中显示派生表的的基本语法 −

SELECT column_name(s) FROM (subquery) AS derived_table_name;

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];

Example

在以下查询中,我们从最初创建的 CUSTOMERS 表中检索派生表。我们使用 WHERE 子句过滤该表中的行来完成该工作:

SELECT ID, NAME, SALARY FROM (SELECT * FROM CUSTOMERS) AS DERIVED_CUSTOMERS
WHERE DERIVED_CUSTOMERS.SALARY > 5000.00;

执行上述查询将产生以下输出:

Aliasing a Column in Derived Table

在派生表中,我们不仅可以指定表名,还可以指定别名,在显示内容时对列名进行别名化。以下为语法:

SELECT column_name(s) AS alias_name(s) FROM (subquery) AS derived_table_name;

Example

在下面的示例中,我们使用以下查询从 CUSTOMERS 表中显示派生表,使用别名列:

SELECT ID AS DERIVED_ID, NAME AS DERIVED_NAME, SALARY AS DERIVED_SALARY
FROM (SELECT * FROM CUSTOMERS) AS DERIVED_CUSTOMERS;

Output

执行上述查询将产生以下输出:

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;

Output

执行上述查询将产生以下输出:

Example

在以下查询中,我们使用聚合函数 AVG() 计算 CUSTOMERS 表中客户的平均薪酬。

SELECT AVG(DERIVED_SUM) AS AVERAGE_SALARY
FROM (SELECT SUM(SALARY) AS DERIVED_SUM FROM CUSTOMERS) AS DERIVED_CUSTOMERS;

Output

执行上述查询将产生以下输出:

Deriving Table Using a Client Program

除了使用 MySQL 查询从另一个数据库表(主表)派生表之外,我们还可以使用诸如 Node.js、PHP、Java 和 Python 等客户端程序来实现相同的功能。

Syntax

以下是此操作在各种编程语言中的语法 −

Example

以下是这些程序 −