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_200 与 User_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中用内嵌视观表语句替换了临时表格名,其他都一样。
|