码迷,mamicode.com
首页 > 数据库 > 详细

第7讲-SQL语言复杂查询之视图

时间:2016-05-07 09:31:57      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:

三级模式两层映像:对应概念模式的数据在SQL中被称为基本表,而对应外模式的数据称为视图。视图不仅包含外模式,而且包含E-C映像。

SQL数据库结构:

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

      2)视图在SQL中只存储其由基本表导出视图的所有公式,即由基本表产生视图的映像信息。视图并不存储数据。

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

1.定义视图

        Create View view_name 列名1[...]

        as (子查询[with check option]);

如果视图的属性名缺省,则默认为子查询结果中的属性名,否则就是指出的列名。

with check option是指:当视图包含insert,updata语句,delete语句时,要检查进行:insert/updata/delete的元组是否,满足视图中定义的子查询定义的约束条件。

例:定义一个视图为Compstud为计算机系的学生。

select View Compstu
AS  (select * From student
where D# in(select D# From Dept where Dname=‘计算机‘);

2.使用视图:定义好的视图可以像table一样在SQL语言中使用。

      例:查询计算机系所有的学生

select * From Comp stud;

      例:检索计算机系年龄小于20的同学

select * From Compstud
where age<20;

  例;定义视图Studstat描述学生信息,平均成绩,最高成绩,最低成绩等等

Create View Studstat (S#,Sname,AVGS,MINS,MAXS,CNT) as
(select S#,Sname,AVG(score),Min(score),Max(score),count(*)
From student S,SC
where S.S#=SC.S#
Group by S.S#);

3.SQL视图的更新:由于视图不保存数据,对视图的更新最终要反映在对基本表的更新,但是有时候视图定义的映射不可逆。

SQL语言视图更新的规则:

  1)如果视图的select的目标包含了聚集函数,则不可以更新。

  2)如果视图中的select使用了unique或者distiinc,则不可以更新。

  3)如果视图中包含了Group by语句,则不可以更新。

  4)如果视图中包含了算数表达式,则不可以更新

  5)如果视图是由单个表的列构成的,但是视图没有包含主键,则不可以更新。

对于单一table子集形成的视图,且包含主键属性,那么视图可以更新。

4.视图的撤销: Drop View view_name

  例:撤销视图Compstud

Drop View Compdtud;

  

第7讲-SQL语言复杂查询之视图

标签:

原文地址:http://blog.csdn.net/tander_tang/article/details/51335264

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!