程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

数据库系统原理:视图的定义与删除

balukai 2025-02-11 10:54:20 文章精选 17 ℃

视图是一个重要的数据库对象,它与关系数据库的外模式相对应。

学习定义和撤销视图的SQL命令的用法。


一、视图分类

(1)行列子集视图:若一个视图从单个基本表导出,并且只是去掉了基本表的某些行和某些列,但保留了码(关键字),称这类视图为行列子集视图;(最简单的一种视图。)

(2)带表达式视图:在定义视图时根据需要设置一些派生列,这些派生列在基本表中并不实际存在,所以称为虚拟列。带虚拟列的视图称为带表达式视图;(某些列2是通过计算获得的。)

(3)分组视图:带有集合函数和Group by子句的查询来定义视图,这种视图称为分组视图。(建立视图的时候使用了聚集函数和Group by子句来定义的视图。)

二、视图定义

语法:

Create View<视图名> [(<列名1 ><列名2>…)]

as Select 查询语句

[With Check Option] ;

在SQL中,定义视图使用CREATE来实现,后面需要给出该视图的名字,以及该视图所组成的所有列的列名;视图是对应于一个子查询的,也就是用AS后面的子查询的结果来创建一个视图;在子查询中,可以使用大部分的查询语句,包括集合查询等等,都是可以允许在子查询中使用的。

①列名要么省略,要么全部指定;省略的时候是由Select中的各个字段组成的,否则的话就必须要指定。·

②列名必须指定的三种情况是:查询语句中带有表达式或聚合函数;查询语句中起了新的名字、有计算的列;查询语句中有多表的连接查询时有同名的列。

③With Check Option表示对视图做插入、修改等更新操作的时候需要满足查询语句Where 中的条件。

例1:建立一个男生的视图。--行列子集视图

Create View F_S

as Select sno,sname,age

From S

Where sex='男'

构造该视图的子查询:从S表中选择“性别为男生”的、选择他学号、姓名和年龄。

用该子查询的结果来创建视图F_S;表S具体的数据有四行四列,而按照CREATE定义视图的办法,视图F_S中应该有三列,如果对该视图做查询的话会得到两个男生的信息能够显示出来。

从上图可以看到,视图F_S去掉了表S的某些行以及某些列,但是保留了主键,因此它是一个行列子集视图

例2:建立学生出生年份的视图。--带表达式的视图

Create View Bt_S(sno,sname,birth)

as Select sno, sname,2017-age

From S;

基本表S中只有学生的年龄信息,而没有出生的年份;如果需要得到出生的年份信息,就需要用表达式来计算,如“2017-age”获得出生年份。

因此在构造视图Bt_S的时候,使用的子查询是在S表中查找学号、姓名以及他的出生年份的表达式。

因此,在这种情况下,在建视图后面一定要指出列的名字,也给计算列起了一个新的名字--birth。

这种视图被称为带表达式的视图的视图。


例3:建立学生的学号和平均成绩的视图。--分组视图

Create View S_G(sno,gavg)

as Select sno,avg(grade)

From SC

Group by sno;

该视图应该基于表SC来创建,通过对学号进行分组来计算每个学生的平均成绩。同时,由于使用了聚集函数,在建立视图的时候要给出列名,具体到学号列和平均成绩列。

从下图可以看到视图S_G里面含有两列,记录的就是每个学生的学号和平均成绩。


例4:在视图S_G(sno,gavg)上建立一个新的视图S_G1。

Create View S_G1(sno,sname,gavg)

as Select S.sno,sname,gavg

From S, S_G

Where S.sno=S G.sno

视图S_G1在视图S_G的基础上增加了一列姓名列。由于姓名列来自于S表,所以需要做一个连接查询,S表和视图S_G做一个连接,条件是S表的学号等于视图S_G的学号,然后得到一个新的视图S_G1。


三、视图删除

语法:

Drop View <视图名>

例5: Drop View S_G;

则建立在 S_G上的视图SG_1失效。

需要注意的是,在视图删除的时候,它是不影响到基本表的;如果有其他视图定义在该视图之上,其他视图则失效。也就是说,定义在视图S_G上的视图SG_1,在删除S_G的时候,它就失效了。如果基本表被删除,定义在基本表上的视图也会失效。

四、总结

视图是数据库中的一个重要对象,它属于外模式。

视图可以建立在一个或几个基本表之上,也可以建立在视图之上。

可以使用Create View语句建立三种类型的视图,即行列子集视图、带表达式的视图和分组视图。

在视图使用的时候,要注意的是,数据库中只存放视图的定义,而不存储实际的数据,只有查询的时候才执行其中的Select语句。

基本表删除后,由该基本表导出的所有视图均失效。

最近发表
标签列表