SQL视图

注:所有的下划线+斜体语句都是非必须语句


什么是视图:

  • 虚拟的表,表中的数据经过某种筛选后的显示方式,基本表数据发生了改变,视图也会跟着改变
  • 基本表是实际存储于存储文件中的表,基本表中的数据是需要存储的,而视图在SQL中只存储其由基本表导出视图所需要的公式,即由基本表产生视图的映像信息,其数据并不存储,而是在运行过程中动态产生与维护的
  • 一般使用视图还可以简化SQL操作,保护数据(只显示部分数据),对不同用户展现不同视图等



视图的相关SQL语句:

视图定义:

create view 视图名 一排列名

as 子查询

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

视图删除:

drop view 视图名

视图使用:

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

示例①:定义一个视图comp为所有选择了003号课程的学生的选课信息


示例②:定义一个视图Teach为教师任课的情况,把Teacher表中的个人隐私方面的信息如工资等屏蔽掉,仅反映其教哪门课及其学分等

Create View Teach AS
(Select T.Tname, C.Cname, Credit From Teacher T, Course C
Where T.Tc = C.Tc);

示例③:重新定义视图comp,描述每个同学的平均成绩、最高成绩、最低成绩

create view comp(name, st, avg, min, max) as
(select name, infer.st, avg(score), min(score), max(score) from infer, sc
where infer.st = sc.st
group by st);


注意以下几种情况不能对视图进行更新:

  • 如果视图的select目标列包含聚集函数,则不能更新
  • 如果视图的select子句使用了unique或distinct,则不能更新
  • 如果视图中包括了group by子句,则不能更新
  • 如果视图中包括经算术表达式计算出来的列,则不能更新
  • 如果视图是由单个表的列构成,但并没有包括主键,则不能更新

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

猜你喜欢

转载自blog.csdn.net/jaihk662/article/details/80160005
今日推荐