在SQL 中,视图是基于SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个真实的表。 视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
视图就像一个中间表。
创建视图
创建视图的语句如下:
-- SQL CREATE VIEW
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
WITH CHECK OPTION选项
WITH CHECK OPTION 是 CREATE VIEW 语句的一个可选项。WITH CHECK OPTION 用于保证所有的 UPDATE 和 INSERT 语句都满足视图定义中的条件。
如果不能满足这些条件,UPDATE 或 INSERT 就会返回错误。下面的例子创建的也是 CUSTOMERS_VIEW 视图,不过这次 WITH CHECK OPTION 是创建的:
CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;
这里 WITH CHECK OPTION 使得视图拒绝任何 AGE 字段为 NULL 的条目,因为视图的定义中,AGE 字段不能为空。
使用视图
如下案例,首先创建视图:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
然后,对上面的视图进行查询:
SELECT * FROM [Current Product List]
更新视图
视图可以在特定的情况下更新:
- SELECT 子句不能包含 DISTINCT 关键字
- SELECT 子句不能包含任何汇总函数(summary functions)
- SELECT 子句不能包含任何集合函数(set functions)
- SELECT 子句不能包含任何集合运算符(set operators)
- SELECT 子句不能包含 ORDER BY 子句
- FROM 子句中不能有多个数据表
- WHERE 子句不能包含子查询(subquery)
- 查询语句中不能有 GROUP BY 或者 HAVING
- 计算得出的列不能更新
- 视图必须包含原始数据表中所有的 NOT NULL 列,从而使 INSERT 查询生效。
更新视图的样例如下:
参考: