SQL视图


目录:1.三级模式两层映像结构和数据库结构

   2.视图的定义和使用

   3.视图在查询方面的使用

   4.视图的更新

   5.视图的撤销

1.三级模式两层映像结构

  (1)对应概念模式(模式)的数据在SQL中被称为基本表

  (2)对应外模式的数据称为视图(还包括外模式-模式(E-C)的映像)

 2.SQL数据库结构

    

  (1)基本表是实际存储在存储文件中的表,基本表中的数据是需要存储的

  (2)视图在SQL中只存储其由基本表导出视图所需要的公式,即由基本表产生视图的映像信息,其数据并不存储,而是在运行过程中动态产生和维护的

  (3)对视图数据的更改最终要反映在对基本表的更改上

 3.视图定义

  (1)语法格式

    create  view  view_name  [(列名[, 列名] ... )]

        as   子查询  [ with check option]

  (2)如果视图的属性名缺省,则默认为子查询结果中的属性名;也可以显式指明其所拥有的列名

  (3)with check option 指明当对视图进行 insert, update, delete时,要进行 insert/update/delete的元组是否满足视图定义中子查询中定义的条件表达式

4.视图定义举例

  (1)定义一个视图 CompStud 为计算机系的学生,通过该视图可以将 Student 表中其他系的同学屏蔽掉

    Creat view CompStud

    As ( Select * From Student Where D# in ( Select D# From Dept Where Dname = '计算机' ) );

  (2)定义一个视图 Teach 为教师任课情况,把 Teacher 表中的个人隐私方面的信息,如个人薪资等屏蔽掉,仅反映其教那门课及其学分等

    Creat view Teach

    As ( Select T.Tname, C.Cname, Credit From Teacher T, Course C Where T.T# = C.T# );

5.视图使用(体现在查询方面)

    定义好的视图,可以像 Table 一样,在SQL各种语句中使用

  (1)检索主讲教师课程的教师姓名,我们可以使用Teach

    Select Tname From Teach Where Cname = '数据库';

  (2)检索计算机系的所有学生,我们可以使用 CompStud

    Select * From CompStud;

  (3)检索计算机系的年龄小于20的所有同学,我们可以使用 CompStud

    Select * From CompStud Where Sage < 20;

  (4)定义视图 StudStat,描述学生的平均成绩,最高成绩,最低成绩等

    Creat view StudStat (S#, Sname, AvgS, MinS, MaxS, CNT)

    As ( Select S#, Sname, AvgS(Score), MIN(Score), MAX(Score), Count(*)

      From Student S, SC

      Where S.S# = SC.S#

      Group by S.S#);

  (5)基于视图 StudStat 检索某一学生的平均成绩

    Select AvgS From StudStat;

6.视图的更新

  (1)因为视图不保存数据,对视图的更新最终要反应在对基本表的更新上,而有时,视图定义的映射是不可逆的

  (2)视图更新问题:有些视图是可更新的,而有的是不可更新的

  (3)举例

    1)create view ClassStud(Sname, Sclass)

       as (Select Sname, Sclass From Student);

       操作:Insert into ClassStud

          Values ('张三', '980301');

        此操作无法更新,对视图 ClassStud 没有 S#,而S#是Student的主键

  (4)视图能否更新的判断

    1)如果视图的 Select 目标列包含聚集函数,不能更新

    2)如果视图的 Select 子句使用了 unique 或 distinct ,不能更新

    3)如果视图包含了 group by 子句,不能更新

    4)如果视图中包括经算术表达式计算出来的列,不能更新

    5)如果视图是由单个表的列构成,但没有主键,不能更新

    6)对于由单一 Table 子集构成的视图,即如果视图是从单个基本表使用选择,投影操作导出的,并且包含了基本表的主键,则可以更新

7.视图的撤销

  (1)撤销视图:Drop View view_name

  (2)举例:Drop View Teach;

  (3)撤销基本表:Drop Table 表名

相关