视图

视图的特点

虚表,是从一个或几个基本表(或视图)导出的表
只存放视图的定义,不会出现数据冗余
基表中的数据发生变化,从视图中查询出的数据也随之改变

建立视图

语句格式

 CREATE  VIEW 
        <视图名>  [(<列名>  [,<列名>]…)]
        AS  <子查询>
   [WITH  CHECK  OPTION];
 
 [例1]  建立信息系学生的视图。
    CREATE VIEW IS_Student
           AS 
           SELECT Sno,Sname,Sage
           FROM    Student
           WHERE  Sdept= 'IS';

删除视图

 DROP  VIEW  <视图名>

该语句从数据字典中删除指定的视图定义
由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除
删除基表时,由该基表导出的所有视图定义都必须显式删除

 [例9]  删除视图IS_S1
  DROP VIEW IS_S1;

查询视图

从用户角度:查询视图与查询基本表相同

 [例1]  在信息系学生的视图中找出年龄小于20岁的学生。
    SELECT   Sno,Sage
    FROM      IS_Student
    WHERE   Sage<20;

 IS_Student视图的定义 (视图定义例1):
    CREATE VIEW IS_Student
           AS 
           SELECT Sno,Sname,Sage
           FROM  Student
           WHERE  Sdept= 'IS‘;

更新视图

用户角度:更新视图与更新基本表相同

[例1]  将信息系学生视图IS_Student中学号95002
       的学生姓名改为“刘辰”。
 UPDATE  IS_Student
 SET  Sname= '刘辰'
 WHERE  Sno= '95002';
 转换后的语句:
 UPDATE  Student
 SET Sname= '刘辰'
 WHERE Sno= '95002' AND Sdept= 'IS';

实际系统对视图更新的限制
允许对行列子集视图进行更新
对其他类型视图的更新不同系统有不同限制
DB2对视图更新的限制:
(1) 若视图是由两个以上基本表导出的,则此视图不允许更新。
(2) 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
(3) 若视图的字段来自集函数,则此视图不允许更新。
(4) 若视图定义中含有GROUP BY子句,则此视图不允许更新。
(5) 若视图定义中含有DISTINCT短语,则此视图不允许更新。
(6) 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。
(7) 一个不允许更新的视图上定义的视图也不允许更新

你可能感兴趣的:(视图)