数据库视图创建及应用
一、视图:
视图是从一个或几个基本表(或视图)导出来的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询出来的数据也就随之改变了。从这个意义上说,视图就像是一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
视图一经定义,就可以和基本表一样被查询、删除,也可以在一个视图上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。
二、视图的作用:
-
视图机制使用户可以将注意力集中放在所关心的数据上。如果这些数据不是直接来自基本表,则可以通过定义视图使数据库看起来结构简单清晰,并且可以简化用户的数据查询操作。例如,那些定义了若干张表连接的视图就将表与表之间的连接操作对用户隐蔽起来,也就是说,用户所做的只是对一个虚表的简单查询,而这个虚表是怎么得来的,用户无需了解。
-
视图使用户能以多种角度看待同一数据。视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是很重要的。
-
视图对重构数据库提供了一定程度的逻辑独立性。具体就不解释了,想了解的去看书或者查资料。
-
视图能够对机密数据提供安全保护。有了视图机制,就可以在设计数据库应用系统时对不同的用户定义不同的视图,使机密数据不出现在不应该看到这些数据的用户视图上。这样视图机制就自动提供了对机密数据的安全保护功能。
三、 根据要求创建视图:
- 创建一个电子05的学生视图(包括学号、姓名、性别、专业班级、出生日期)。
use 学生作业管理
go
create view 电子05学生视图
as select 学号,姓名,性别,专业班级,出生日期 from 学生表 where 专业班级 = '电子05'
- 创建一个生物05的学生作业情况视图(包括学号、姓名、课程名、
作业1成绩、作业2成绩、作业3成绩)。
create view 生物05作业视图
as select 学生作业表.学号,姓名,课程名,作业1成绩,作业2成绩,作业3成绩
from 学生作业表,学生表,课程表 where 学生作业表.学号 = 学生表.学号 and
课程表.课程号 = 学生作业表.课程号 and 学生表.专业班级 = '生物05'
go
- 创建一个学生作业平均成绩视图(包括学号、作业1平均成绩、作
业2平均成绩、作业3平均成绩)。
create view 学生平均成绩
as select 学号, avg(作业1成绩) as 作业1平均成绩,
avg(作业2成绩) as 作业2平均成绩, avg(作业3成绩) as 作业3平均成绩 from 学生作业表
group by 学号
go
- 修改第2题中生物05的学生作业情况视图,将作业2和作业3成
绩去掉。
alter view 生物05作业视图
as select 学生作业表.学号,姓名,课程名,作业1成绩 from 学生作业表,学生表,课程表
where 学生作业表.学号 = 学生表.学号 and
课程表.课程号 = 学生作业表.课程号 and 学生表.专业班级 = '生物O5'
go
- 向电子05的学生视图中添加一条记录,其中学号为0596,姓名为赵亦,性别为男,专业班级为电子05,出生日期为1986-6-8(除了电子05的学生视图发生变化之外,看看学生表中发生了什么变化?)
insert into 电子05学生视图(学号,姓名,性别,专业班级,出生日期
values (0596,'赵亦','男','电子05', '1986-6-8')
go
查询视图内容:
查询学生信息表:
学生表中也出现了赵亦同学的信息,因为视图是一张虚表,所以对视图的更新,最终转换为对基本表的更新。
- 将电子05的学生视图中赵亦的性别改为“女” 。
update 电子05学生视图 set 性别 = '女' where 姓名 = '赵亦'
- 删除电子05的学生视图中赵亦的记录。
delete from 电子05学生视图 where 学号 = 596 ;
- 删除电子05的学生视图
drop view 电子05学生视图