7.4.3 使用视图

7.4.3 使用视图

视图创建后,基本上就可以把它当成基本表来进行查询了。但对视图进行更新数据时也会有些限制。

1.查询视图

【例7.56】查找平均成绩在75分以上的学生学号和平均成绩。

本例首先创建学生平均成绩视图xs_kc_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中名为avg)。

img392

再对xs_kc_AVG视图进行查询。

img393

执行结果:

img394

从上例可以看出,创建视图可以向最终用户隐藏复杂的表,简化了用户的SQL程序设计。视图还可以通过在创建视图时指定限制条件和指定列限制用户对基本表的访问。例如若限制用户只能查询cs_xs视图,实际上就是限制了他只能访问xs表专业名为“计算机软件”的行;在创建视图时可以指定列,实际上也就是限制了用户只能访问这些列,从而视图也可看作数据库的安全设施。

使用视图时,若其关联的基本表中添加了新字段,则必须重新创建视图才能查询到新字段。例如,若xs表中新增了“籍贯”字段,在其上创建的视图cs_xs若不重建视图,那么以下查询:

img395

结果将不包含“籍贯”字段。只有重建cs_xs视图后再对它进行查询,结果中才会有该字段。

如果与视图关联的表或视图被删除,则该视图将不能再使用。

2.更新视图

通过更新视图(包括插入、修改和删除)数据可以修改与之关联的基本表数据。但并不是所有视图都可以更新,可更新的视图必须满足以下限制:

创建视图的SELECT语句中没有聚合函数(集函数),且没有TOP、GROUP BY、UNION子句及DISTINCT关键字。

创建视图的SELECT语句中不能包括经过计算得到的列。

创建视图的SELECT语句的FROM子句中至少要包含一个基本表。

满足以上条件的视图,对其进行更新和对基本表进行更新的语句是一样的,只需把表名换成视图名即可。

(1)插入数据

【例7.57】向cs_xs视图中插入一条记录:('061104', '刘亮', '计算机软件','男','1988-8-8',185.5,0,NULL)

img396

查看xs表时将会看到,该记录已经添加到xs表中。往视图中插入记录,实际上就是往与该视图相关联的基本表中插入数据。

注意:当视图依赖多个基本表时,不能向该视图执行插入操作。

(2)修改数据

【例 7.58】将cs_xs视图中所有学生的备注列改成“提前获得2学分”。

img397

该语句实际也是更改xs表中相应的字段值。若一个视图依赖于多个基本表,则一次修改该视图只能变动一个基本表的数据。

【例 7.59】创建一个视图cs_kc,包括计算机软件专业各学生的学号、选修课程号、成绩。

img398

【例 7.60】将cs_kc视图中061101学生的101课程的成绩改为90分。

img399

例7.59和例7.60中,视图cs_kc依赖于两个表:xs和xs_kc,对cs_kc视图的一次修改只能改变学号(源于xs表)或者课程号和成绩(源于xs_kc表)。以下的修改是错误的:

img400

原因是一次UPDATE企图修改两个基本表中的数据。

(3)删除数据

使用delete FROM语句来对视图进行操作时应注意,对于依赖多个基本表的视图,不能使用delete FROM语句。例如,不能通过对cs_kc视图执行delete语句而删除与之关联的基本表xs及xs_kc表的数据。

【例 7.61】删除cs_xs视图中的女同学记录。

img401

上面介绍的插入、修改及删除也可以通过企业管理器的界面进行,操作方法与对表数据的操作方法基本相同,在此就不作介绍了。但要注意对视图更新的限制。

3.修改视图定义及删除视图

修改视图定义可以通过SQL企业管理器的界面进行,也可使用T-SQL的ALTER VIEW语句进行。

(1)通过企业管理器来修改视图

①在企业管理器中展开数据库和视图,在需修改的视图上单击鼠标右键,在弹出的快捷菜单上选择“设计视图”,将出现如图7.10所示的窗口。

②在如图7.10所示的窗口中对视图定义进行修改,修改完后单击“保存”按钮即可。

img402

图7.10 修改视图

(2)通过ALTER VIEW语句来修改视图

【例 7.62】将cs_xs视图修改为只包含学号和姓名字段。

ALTER VIEW cs_xsASSELECT 学号,姓名FROM xsWHERE 专业名='计算机软件'

注意:和CREATE VIEW语句一样,ALTER VIEW也必须是批处理命令的第一条语句。

(3)删除视图

删除视图同样也可以通过企业管理器和T-SQL语句两种方法来实现。其方法和删除基本表的方法类似。

在企业管理器中删除视图的操作方法是:展开数据库视图,在需删除的视图上单击鼠标右键,在弹出的快捷选单上选择“删除”,在出现的对话框中单击“全部除去”按钮即可删除指定的视图。

用T-SQL语句删除视图的语句格式为:

img403

其中,VIEW_name是视图名,使用DROP VIEW一次可以删除多个视图。例如:

img404

将删除cs_kc视图。