SQL 内嵌视观表



内嵌视观表 (inline view) 是 FROM 子句中的 SELECT 语句。视观表是一个虚拟表格,具有表格的特性,但不保存任何实体数据。在内嵌视观表结构中,实际数据的来源来自内嵌视观表,而非是在 FROM 关键字之后指定表格名。

内嵌视观表有时被称为衍生表格 (derive table),这两个术语可以互换使用。

语法

内嵌视观表的语法如下:

SELECT "栏位名" FROM "内嵌视观表";

例子

假设我们有两个表格:第一个表格是 User_Address,纪录每个用户的邮政编码 (ZIP_CODE);第二个表格是 User_Score,记录每个用户的所有分数。问题是,如何编写 SQL 查询以找到每个邮政编码中得分高于200的用户数?

如果我们不使用内嵌视观表,我们可以分两步骤完成:

查询 1

CREATE TABLE User_Higher_Than_200
SELECT User_ID, SUM(Score) FROM User_Score
GROUP BY User_ID
HAVING SUM(Score) > 200;

查询 2

SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM User_Higher_Than_200 a1, User_Address a2
WHERE a1.User_ID = a2.User_ID
GROUP BY a2.ZIP_CODE;

在上述代码中,我们引入了一个临时表格 User_Higher_Than_200,用于存储得分高于200的用户列表。然后透过User_Higher_Than_200User_Address 表格的连接来获取最终结果。

我们可以使用内嵌视观表结构来简化上述的 SQL:

查询 3

SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM
(SELECT User_ID, SUM(Score) FROM User_Score GROUP BY User_ID HAVING SUM(Score) > 200) a1,
User_Address a2
WHERE a1.User_ID = a2.User_ID
GROUP BY a2.ZIP_CODE;

在上述代码中,红色标记的代码表示内嵌视观表。在这里使用内嵌视观表有两个优点:

1. 我们不需要创建临时表格。这可以防止数据库中存在太多物件,因为数据库中的每个额外物件都会消耗管理资源。

2. 我们可以使用一个 SQL 查询来完成我们想要的事情。

请注意,我们对内嵌视观表的处理方式与对待表的方式完全相同。比较查询2和查询3,我们看到唯一的区别是在查询2中用内嵌视观表语句替换了临时表格名,其他都一样。

SQL INTERSECT >>

本页最近于 2023年12月26日更新



Copyright © 2024   1keydata.com   All Rights Reserved.