美文网首页
SQL中的视图

SQL中的视图

作者: Bigdata234 | 来源:发表于2018-09-04 23:21 被阅读0次

    在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 查询生效。

    更新视图的样例如下:

    
    

    参考:

    相关文章

      网友评论

          本文标题:SQL中的视图

          本文链接:https://www.haomeiwen.com/subject/fsqowftx.html