SQL 中的视图2025年3月17日 | 阅读 3 分钟 - SQL 中的视图被视为一个虚拟表。视图也包含行和列。
- 要创建视图,我们可以选择数据库中一个或多个表中的字段。
- 视图可以根据特定条件包含特定行,也可以包含表的所有行。
视图的优点- 复杂性:视图有助于降低复杂性。可以为不同的用户在同一个基表上创建不同的视图。
- 安全性:通过从视图中排除敏感信息来提高安全性。
- 查询简化:有助于简化用户的命令。视图可以从多个不同的表中提取数据,并将其呈现为单个表。
- 一致性:视图可以呈现数据库结构的一致、不变的图像。视图可用于重命名列而不影响基表。
- 数据完整性:如果通过视图访问和输入数据,DBMS 可以自动检查数据以确保其满足指定的数据完整性约束。
- 存储容量:视图占用非常少的空间来存储数据。
- 逻辑数据独立性:视图可以在一定程度上使应用程序和数据库表相互独立。
视图的缺点使用单个基表创建的视图在 DML 语句方面存在某些限制: - 如果基表中有任何非空列未出现在视图中,则不能插入。
- 如果 INSERT 或 UPDATE 中引用的任何列包含聚合函数或由表达式定义的列,则不能插入或更新。
- 如果启用了只读选项,则不能在视图上执行 INSERT、UPDATE、DELETE 语句。
- 不能在临时表上创建视图。
- 如果视图包含聚合函数 GROUP BY、DISTINCT 或对伪列 rownum 的引用,则不能插入、更新、删除。
- 不能将参数传递给 SQL Server 视图。
- 不能将规则和默认值与视图关联。
示例表Student_Detail STU_ID | 姓名 | 地址 |
---|
1 | Stephan | 德里 | 2 | Kathrin | Noida | 3 | 大卫 | Ghaziabad | 4 | Alina | 古尔冈 |
学生分数 STU_ID | 姓名 | MARKS | 年龄 |
---|
1 | Stephan | 97 | 19 | 2 | Kathrin | 86 | 21 | 3 | 大卫 | 74 | 18 | 4 | Alina | 90 | 20 | 5 | John | 96 | 18 |
1. 创建视图可以使用 **CREATE VIEW** 语句创建视图。我们可以从单个表或多个表创建视图。 语法 2. 从单个表创建视图在此示例中,我们从 Student_Detail 表创建了一个名为 DetailsView 的视图。 查询 就像查询表一样,我们可以查询视图来查看数据。 输出 姓名 | 地址 |
---|
Stephan | 德里 | Kathrin | Noida | 大卫 | Ghaziabad |
3. 从多个表创建视图可以通过在 SELECT 语句中包含多个表来创建来自多个表的视图。 在给出的示例中,从 Student_Detail 和 Student_Marks 两个表创建了一个名为 MarksView 的视图。 查询 显示 View MarksView 的数据
姓名 | 地址 | MARKS |
---|
Stephan | 德里 | 97 | Kathrin | Noida | 86 | 大卫 | Ghaziabad | 74 | Alina | 古尔冈 | 90 |
4. 删除视图可以使用 Drop View 语句删除视图。 语法 示例 如果要删除 View **MarksView**,可以这样做: 视图的意义视图具有高度意义,因为它们可以在任务方面提供优势。视图可以表示表中数据的子集。因此,它们可以限制底层基表对外部世界的暴露程度。它们用于数据库中的安全目的,充当真实表架构和可编程性之间的中间层。它们充当聚合表。 视图的类型视图有两种类型。  - 连接视图(Join View):连接视图是在其 from 子句中包含一个或多个表或视图的视图,并且它不使用任何 Group by 子句、Rownum、Distinct 和集合操作。
- 内联视图(Inline View):内联视图是通过替换 from 子句中的子查询来创建的视图,该子查询定义了可在主查询中引用的数据源。为了高效工作,子查询必须具有别名。
|