MySQL 派生表

MySQL 中的派生表是从 SELECT...FROM 语句返回的虚拟表。也就是说,它是一个表达式,在SELECT语句的FROM子句范围内生成一个表。这个概念类似于临时表。但是,派生表比临时表更简单,因为不需要使用创建临时表所需的所有步骤。

大多数开发人员交替使用术语派生表和子查询。因此,我们可以说,当我们在 SELECT...FROM 子句中使用子查询时,它被称为派生表。

一、MySQL 派生表 语法

以下是在MySQL中使用派生表的语法:

SELECT ... FROM (subquery) [AS] table_name (column_list) WHERE condition;  

需要注意的是,独立子查询是一个子查询,可以独立于包含该查询的语句执行。

我们还应该考虑派生表必须包含别名表名称,以便我们稍后在语句中引用它的名称。如果我们不为派生表提供别名,MySQL 将发出以下错误消息:

Every derived table must have its own alias.

派生表的每一列也必须具有唯一的名称。让我们在下图的帮助下理解它。

首先,我们将使用以下语句创建一个表:

mysql> CREATE TABLE test1 (s1 INT, s2 CHAR(5), s3 FLOAT);  

接下来,使用以下语句将一些记录填充到此表中:

mysql> INSERT INTO test1 VALUES (1, 'A', 10.0), (2, 'B', 20.0), (3, 'C', 30.0);   

执行SELECT 语句验证输出:

现在,执行以下语句以了解我们如何在FROM 子句中使用子查询

SELECT sb1, sb2, sb3  
  FROM (SELECT s1 AS sb1, s2 AS sb2, s3*5 AS sb3 FROM test1) AS test1_set  
  WHERE sb1 < 4;

它将返回如下输出:

让我们再举一个例子,我们将获得浮点值列的平均值。执行以下语句:

SELECT AVG(sum_float)  
  FROM (SELECT SUM(s3) AS sum_float FROM test1 GROUP BY s1) AS totals;  

在上面的语句中,派生表计算浮点列的总和,然后从外部查询返回平均值。请参阅以下输出:

二、MySQL 中的派生表的限制

  • MySQL 不使用相关子查询作为派生表。
  • MySQL 不允许派生表使用对同一 SELECT 语句的其他表的引用。
  • 我们不能在派生表中使用外部引用。

热门文章

优秀文章