视图的类型
- 简单视图(Simple View): 基于单张表的视图,不包含
GROUP BY子句和任何函数。 -
复杂视图(Complex View): 基于多张表的视图,包含
GROUP BY子句和函数。 -
内联视图(Inline View): 基于
FROM子句中的子查询,该子查询会创建一个临时表以简化复杂查询。 -
物化视图(Materialized View): 同时存储定义和数据的视图。它通过物理存储数据来创建数据副本。

简单视图

复杂视图


内联视图
内联视图是在另一个 SELECT 语句的 FROM 子句中出现的一个 SELECT 语句,用于创建可被该 SELECT 引用的临时表。内联视图用于在不使用连接和子查询操作的情况下编写复杂 SQL 查询。之所以称为临时表,是因为存储的子查询返回的数据副本并不会存入数据库。在 Oracle 和 Postgres 社区中,这种临时表称为内联视图(inline view),也被称为子选择(subselect)。

物化视图
物化视图会将检索到的数据以物理形式复制。该复制的数据可在无需再次执行视图的情况下复用。这类视图也称为“快照(SNAPSHOTS)”。物化视图可减少重新生成整份数据的处理时间,帮助远程用户在本地复制数据并提升查询性能。挑战在于如何将物化视图与其底层表的变更保持同步。


视图与物化视图的对比

在 SQL 中创建与删除视图
可以使用 CREATE VIEW 和 REPLACE VIEW 来创建和替换视图。

可以使用 DROP VIEW 命令删除视图。

视图的优缺点
视图可作为实际数据的子集来执行特定操作。它有助于为不同用户提供抽象,或对从表访问数据的用户隐藏复杂性。例如,某个用户仅有权访问特定列,而非整张表。它还能将复杂查询简化为更易理解的形式,并简化来自多表连接的数据访问。通过分组操作,视图还可用作汇总表。视图可用于安全目的,或从安全角度增加附加价值。视图不占用空间,因为它只在数据字典中有定义,而不保存实际数据副本。
尽管优点众多,视图也存在一些缺点,如对基表结构的依赖、计算时间和限制等。视图依赖于表结构。如果您更改了表结构,就必须相应地修改与之关联的视图定义。
结论
恭喜您读到本教程的最后!
在本教程中,您深入了解了视图的相关内容。您学习了什么是视图、视图的类型、简单视图、复杂视图、内联视图、物化视图、创建和删除视图的语法,以及视图的优缺点。
现在就运用视图的概念来分析您自己的数据集吧。感谢阅读!
如果您想进一步学习 SQL,欢迎参加我们的 Introduction to Relational Databases in SQL 课程。
数据库管理员和数据库用户面临两大挑战:编写复杂的 SQL 查询以及保障数据库访问安全。有时,由于在单个查询中使用了多个连接、子查询和 GROUP BY,SQL 查询会变得更加复杂。
为简化此类查询,您可以在原始表之上使用某种代理。此外,从安全角度看,数据库管理员有时希望限制对数据库的直接访问。比如,若某张表包含多个列,但用户只需要其中三列数据,DBA 会创建一个仅含三列的虚拟表。出于这两类目的,您都可以使用视图。视图可充当代理或虚拟表,既能降低 SQL 查询的复杂度,也能为底层表提供更安全的访问方式。
什么是视图?
视图是 SQL 中一种特殊的表形式。它为各种复杂操作提供了虚拟表的环境。您可以从多张表中选择数据,或基于特定条件选择特定数据。视图本身不存储实际数据;它只在数据字典中保存视图的定义。
视图是一条存储在数据字典中的查询,用户可以像查询表一样对其进行查询。它不占用物理存储,仅查询定义保存在数据字典中。每当用户对其执行查询时,都会动态计算。对视图所做的更改会反映到实际的基表中。
视图的主要目的有两点: