SQL - 使用视图
-
简述
视图只不过是存储在具有关联名称的数据库中的 SQL 语句。视图实际上是预定义 SQL 查询形式的表的组合。视图可以包含表的所有行或从表中选择行。可以从一个或多个表创建视图,这取决于编写的 SQL 查询来创建视图。视图是一种虚拟表,允许用户执行以下操作 --
以用户或用户类别认为自然或直观的方式构造数据。
-
以用户可以看到和(有时)准确修改他们需要的内容的方式限制对数据的访问。
-
汇总各种表格中的数据,这些表格可用于生成报告。
-
-
创建视图
数据库视图是使用CREATE VIEW陈述。可以从单个表、多个表或另一个视图创建视图。要创建视图,用户必须根据具体实现具有适当的系统权限。基础的CREATE VIEW语法如下 -您可以在 SELECT 语句中包含多个表,其方式与在普通 SQL SELECT 查询中使用它们的方式相似。例子
考虑具有以下记录的 CUSTOMERS 表 -以下是从 CUSTOMERS 表创建视图的示例。此视图将用于获取 CUSTOMERS 表中的客户姓名和年龄。现在,您可以以与查询实际表类似的方式查询 CUSTOMERS_VIEW。以下是相同的示例。这将产生以下结果。 -
WITH CHECK 选项
WITH CHECK OPTION 是 CREATE VIEW 语句选项。WITH CHECK OPTION 的目的是确保所有 UPDATE 和 INSERT 都满足视图定义中的条件。如果它们不满足条件,则 UPDATE 或 INSERT 返回错误。以下代码块具有使用 WITH CHECK OPTION 创建相同视图 CUSTOMERS_VIEW 的示例。这种情况下的 WITH CHECK OPTION 应该拒绝在视图的 AGE 列中输入任何 NULL 值,因为视图是由 AGE 列中没有 NULL 值的数据定义的。更新视图
可以在以下给出的某些条件下更新视图 --
SELECT 子句可能不包含关键字 DISTINCT。
-
SELECT 子句可能不包含汇总函数。
-
SELECT 子句可能不包含集合函数。
-
SELECT 子句可能不包含集合运算符。
-
SELECT 子句可能不包含 ORDER BY 子句。
-
FROM 子句不能包含多个表。
-
WHERE 子句不能包含子查询。
-
查询可能不包含 GROUP BY 或 HAVING。
-
计算的列可能不会更新。
-
基表中的所有 NOT NULL 列都必须包含在视图中,INSERT 查询才能正常工作。
因此,如果视图满足上述所有规则,那么您可以更新该视图。以下代码块有一个更新 Ramesh 年龄的示例。这最终会更新基表 CUSTOMERS,同样会反映在视图本身中。现在,尝试查询基表,SELECT 语句将产生以下结果。在视图中插入行
数据行可以插入到视图中。适用于 UPDATE 命令的相同规则也适用于 INSERT 命令。在这里,我们不能在 CUSTOMERS_VIEW 中插入行,因为我们没有在此视图中包含所有 NOT NULL 列,否则您可以在视图中插入行,就像在表中插入它们一样。将行删除到视图中
可以从视图中删除数据行。适用于 UPDATE 和 INSERT 命令的相同规则适用于 DELETE 命令。以下是删除 AGE = 22 的记录的示例。这最终会从基表 CUSTOMERS 中删除一行,同样会反映在视图本身中。现在,尝试查询基表,SELECT 语句将产生以下结果。删除视图
显然,在您有视图的地方,如果不再需要视图,您需要一种方法来删除它。语法非常简单,如下所示 -以下是从 CUSTOMERS 表中删除 CUSTOMERS_VIEW 的示例。 -