视图

视图的特点

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

建立视图

语句格式

 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) 一个不允许更新的视图上定义的视图也不允许更新

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 视图 很多人对视图View感到很沮丧,因为它看起来跟select语句没什么区别。在视图中我们同样可以使用selec...
    祭祀WO菛僾_3930阅读 10,752评论 0 1
  • 介绍数据修改的SQL语句以及视图与索引。 数据修改 三种修改方式: 修改某一个元组的值/* 将学生20121512...
    zealscott阅读 3,110评论 0 0
  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 9,317评论 1 22
  • 前言:当一个大型系统在建立时,会发现,数据库虽然可以存储海量的数据,可是一旦数据关系复杂,比如学生表(学号、姓名、...
    JackFrost_fuzhu阅读 4,943评论 0 2
  • 又到周末总结日 阅读 本周阅读了三本书,《高效能人士的笔记整理术》、《聪明的人用方格笔记本》、阅读并抄写...
    Lisa的小世界阅读 5,435评论 10 19