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

本文详细介绍了SQL中的视图概念,包括视图的三层模式映像、基本表与视图的区别。通过创建、使用和更新视图的实例,展示了视图在数据查询和管理中的作用。同时,文章列出了SQL视图更新的规则,强调了哪些情况下视图无法进行数据修改,并提供了撤销视图的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三级模式两层映像:对应概念模式的数据在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;

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值