当前位置:Gxlcms > 数据库问题 > 第7讲-SQL语言复杂查询之视图

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

时间:2021-07-01 10:21:17 帮助过:2人阅读

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语言复杂查询之视图

标签:

人气教程排行