视图的定义:从一个或多个表(或视图)导出的表。
视图与表的不同之处:视图是一个虚表,即视图所对应的数据不进行实际存储,数据库只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
视图一经定义,就可以像表一样被查询、修改、删除和更新。创建视图时,原表既可以是基本表,也可以是视图。
Create view 语句创建视图,,语法格式如下:
Create view view_name
As select_statement [with check option]
其中,with check option:指出在视图上所进行的修改都要符合select_statement所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。
select_statement:用来创建视图的select语句,可在select语句中查询多个表或视图,以表明新创建的视图所参照的表或视图。对select语句有以下限制:
- 定义视图的用户必须对所参照的表或视图有查询(即可执行select语句)权限。
- 不能使用compute或compute by子句。
- 不能使用order by子句。
- 不能使用Into子句。
- 不能在临时表或表变量上创建视图。
视图的运用举例如下:
例一:有两张表:XS(学号、姓名、专业名、出生时间、性别)和XS_KC(学号、课程号、成绩),要求创建CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。要保证对该视图的修改都要符合专业名为计算机这个条件。
分解法:A,先查询出专业名为计算机的学生的学号,并查询出该学生选修的课程号及成绩
查询语句如下:A: select XS.学号,课程号,成绩
from XS,XS_KC
where XS.学号 =XS_KC.学号 and 专业名=‘计算机’
B,创建视图,包括计算机专业各学生的学号、其选修的课程号及成绩
查询语句如下:B:Create View CS_KC
As A with check option
合并起来的查询语句即为:
Create View CS_KC
AS
select XS.学号,课程号,成绩
from XS,XS_KC
where XS.学号 =XS_KC.学号 and 专业名=‘计算机’
with check option
例二:创建计算机专业学生的平均成绩视图CS_KC_AVG,包括学生学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)
分析:在例一中已经创建了视图CS_KC,该虚拟表包括字段学号、成绩,故可以直接使用视图来创建新的视图
分解如下:
A,先从视图中查询出学生的学号和平均成绩
查询语句如下:A:select 学号,Avg(成绩)
from CS_KC
group by 学号
B,基于A查询出来的结果创建新的视图CS_KC_AVG
查询语句如下:B: Create View CS_KC_AVG
As A
合并起来的查询语句即为:
Create View CS_KC_AVG(num,score_avg)
As
select 学号,Avg(成绩)
from CS_KC
group by 学号