4.2.1 视图定义

4.2.1 视图定义

我们在SQL中用create view命令定义视图。为了定义视图,我们必须给视图一个名称,并且必须提供计算视图的查询。

创建视图的格式

create view命令的格式为:

1
create view v as<query expression>;

其中

  • <query expression>可以是任何合法的查询表达式,
  • v表示视图名

实例

重新考虑需要访问instructor关系中除salary之外的所有数据的职员。这样的职员不应该授予访问instructor关系的权限(我们将在后面4.6节介绍如何进行授权)。相反,可以把视图关系faculty提供给职员,此视图的定义如下:

1
2
3
create view faculty as
select ID, name, dept_name
from instructor;
1
2
3
4
5
mysql> create view faculty as
select ID, name, dept_name
from instructor;
Query OK, 0 rows affected (0.01 sec)

视图关系是在需要的时候才被创建的

正如前面已经解释过的,视图关系在概念上包含查询结果中的元组,但并不进行预计算和存储。相反,数据库系统存储与视图关系相关联的查询表达式。
当视图关系被访问时,视图关系中的元组是通过计算查询结果而被创建出来的。从而,视图关系是在需要的时候才被创建的

为了创建一个视图,列出Physics系在2009年秋季学期所开设的所有课程段,以及每个课程段在哪栋建筑的哪个房间授课的信息,我们可以写出:

1
2
3
4
5
6
7
create view physics_fall_2009 as
select course.course_id, sec_id, building, room_number
from course,section
where course.course_id=section.course_id
and course.dept_name = 'Physics'
and section.semester = 'Fall'
and section.year =2009;
1
2
3
4
5
6
7
8
mysql> create view physics_fall_2009 as
select course.course_id, sec_id, building, room_number
from course,section
where course.course_id=section.course_id
and course.dept_name = 'Physics'
and section.semester = 'Fall'
and section.year =2009;
Query OK, 0 rows affected (0.02 sec)