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
3create view faculty as
select ID, name, dept_name
from instructor;1
2
3
4mysql> 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
7create 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
8mysql> 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)