3.6 视图

3.6 视图

视图的概念

在SQL中,视图(View)是一种建立在SELECT查询结果集上的虚拟表。

视图可以基于数据库表或其他视图来构建,它本身没有自己的数据,而是使用了存储在基础表中的数据。

视图一但被定义,它便作为对象存储在数据库中,但视图本身并不存储数据,而是通过其虚拟视窗映射到基础表 中的数据。

对视图的操作与对数据库表的操作一样,可以对其数据进行查询和一定约束的修改与删除。

创建视图

【例】若需要建立一个由基础课程数据构成的视图BasicCourseView

CREATE VIEW BasicCourseView AS
SELECT CourseName, CourseCredit, CoursePeriod, TestMethod
FROM Course
WHERE CourseType=’基础课’;

【例】操作访问视图,像访问数据表一样

SELECT *
FROM BasicCourseView
ORDER BY CourseName;

删除视图

DROP VIEW BasicCourseView;

视图的使用

  • 视图是虚拟表,在数据库中只需要存储视图的结构定义,而不存储视图所包含的数据。
  • 会有很多好处

1.使用视图简化复杂SQL查询操作

【例3-48】在选课管理系统数据库中,我们希望查询选修“数据库原理及应用”课程的学生名单。需要关联课程 信息表(Course)、开课计划表(Plan)、选课注册表(Register)、学生信息表(Student),其查询SQL语句如下。

SELECT C.CourseName AS 课程名称, S.StudentID AS 学号, S.StudentName AS 姓名
FROM Course AS C,Plan AS P, Register AS R, Student AS S
WHERE C.CourseID=P.CourseID AND C. CourseName=' 数据库原理及应用’ AND
P.CoursePlanID=R.CoursePlanID AND R.StudentID=S. StudentID;

这个SQL语句较复杂和冗长,为了让外部程序简单地实现该信息的查询,可以先定义一个名称为 DataBaseCourseView视图,其视图创建SQL语句如下。

CREATE VIEW DataBaseCourseView AS
SELECT C.CourseName AS 课程名称, S.StudentID AS 学号, S.StudentName AS 姓名
FROM Course AS C, Plan AS P, Register AS R, Student AS S
WHERE C.CourseID=P.CourseID AND C. CourseName=’数据库原理及应用’ AND
P.CoursePlanID=R.CoursePlanID AND R.StudentID=S.StudentID;

当DataBaseCourseView视图被创建完成后,外部程序就可以通过一个简单的SELECT语句查询视图数据,其操作语 句如下。

SELECT * FROM DataBaseCourseView;

从上面的视图使用可看到,视图访问操作可以获得与数据库表直接访问操作同样的结果,但视图可以让编程人员 使用简单的SQL查询语句,而非编写复杂的SQL语句。

2.使用视图提高数据访问安全性

通过视图可以将基础数据库表中部分敏感数据隐藏起来,外部用户无法得知数据库表的完整数据,降低数据库被 攻击的风险。此外,通过视图访问,用户只能查询和修改他们所能见到的数据,可以保护部分隐私数据。

【例3-49】在选课管理系统数据库中,除教务管理部门用户外,其他用户只能浏览教师基本信息,如教师编号、 教师姓名、性别、职称、所属学院,教师其他信息被隐藏,可定义视图来处理信息,其视图创建SQL语句如下。

CREATE VIEW BasicTeacherInfoView AS
SELECT T.TeacherID AS 编号, T.TeacherName AS 教师姓名, T.TeacherGender AS 性别, T.
TeacherTitle AS 职称, C.CollegeName AS 所属学院
FROM Teacher AS T, College AS C
WHERE T.CollegeID=C.CollegeID;

当 BasicTeacherInfoView 视图被创建完成后,外部程序就可以通过一个简单的 SELECT语句查询视图数据,其操作 语句如下。

SELECT * FROM BasicTeacherInfoView
ORDER BY 所属学院 , 编号;

3.提供一定程度的数据逻辑独立性

视图可提供一定程度的数据逻辑独立性。当数据表结构发生改变,只要视图结构不变,应用程序可以不做修改。

【例3-50】在选课管理系统数据库中,如果教师信息表(Teacher)的结构进行了改变,增加了“出生日期”字段,其表结构为(TeacherID,TeacherName,TeacherGende,BirthDay,TeacherTitle, CollegeID,TeacherPhone)。但只要定义教师 基本信息的视图BasicTeacherInfoView结构不变,则使用该视图的外部程序不需要变动。

4.集中展示用户所感兴趣的特定数据

视图可以将部分用户不关心的数据进行过滤,仅仅提供他们所感兴趣的数据。

【例3-51】在选课管理系统数据库中,教务部门希望查询出没有被学生选修的课程名称及其教师信息。这里可以 创建一个查询该信息的视图NoSelCourseView,其视图创建SQL语句如下。

CREATE VIEW NoSelCourseView AS
SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师, COUNT(R.CoursePlanID) AS 选课人数
FROM Course AS C JOIN Plan AS P
ON C.CourseID=P.CourseID
JOIN Teacher AS T ON P.TeacherID=T.TeacherID
LEFT JOIN Register AS R ON P.CoursePlanID=R.CoursePlanID
GROUP BY C.CourseName, T.TeacherName;

当NoSelCourseView视图创建完成后,外部程序就可以通过一个简单的SELECT语句查询视图数据

SELECT 课程名称, 教师 FROM NoSelCourseView
WHERE 选课人数=0;
posted @ 2022-03-30 23:52  Dinesaw  阅读(248)  评论(0编辑  收藏  举报