数据库语句之视图
- 视图
视图可以看成是一个保存在数据库中的SELECT语句,查询视图也就是执行相应的SELECT语句,SELECT语句执行的结果是一个表,所以视图也可以看成是一个表,但建立视图后,数据库仅存放视图的定义,即对应的SELECT语句并不存放查询结果,所以可以把视图看成一个虚表,即不占用物理空间的表。当视图对应的SELECT语句中的数据源发生变化,SELECT的结果也将发生变化,从视图中查询出的数据也发生变化。
视图具有表的特征,所以在SELECT语句中,视图可以和表一样作为查询的数据源,也可以向表一样进行增删改操作
1.建立试图和查询视图
CREATE VIEW <视图名> [(<列名> [,<列名2>]···)]
[WITH CHECK OPTION]
AS <SELECT子查询>
[WITH ENCRYPTION]
执行建立视图的语句后,DBMS只是把视图的定义存入数据库,并不执行其中的SELECT语句。只有在对视图查询时才按视图的定义执行对应的SELECT语句并返回结果
例:
3.选课表(Student_Elevtive)
(1)建立所有学生选修课成绩的视图 AllStudentElectiveGrade
CREATE VIEW AllStudentElectiveGrade
AS
SELECT a.StdId,a.StdName,b.EleName,c.Grade
FROM Student a.Elective b,Student_Elective c
WHERE a.StdId=c.StdId AND b.EleId=c.EleId
(2)建立所有学生选修课的平均成绩视图
create view allstudentavg(StdId,StdName,AvgGrade)
as
select a.StdId,a.StdName,AVG(b.Grade)
from Student a,Student_Elevtive b
where a.StdId=b.StdId
group by a.StdId,a.StdName
查询视图
select * from allstudentavg
2.删除视图
语句
DROP VIEW <视图名>
3.视图的应用
(1)当一个比较复杂的查询在系统开发中需要在多处被使用,尤其需要被不同的功能模块使用时,可以把该查询定义为一个视图,可以使开发小组能共享并重用这个视图对应的SELECT语句
(2)当查询仅从所有实际存在的表中获取数据有难度时,可以使用一个视图表达一个中间结果,然后把中间结果的视图作为查询的数据源。
(3)对一个表的满足特定条件的进行数据安全控制,即要求对某些能直接访问数据库的用户,仅允许他们访问(包括增删改查)某一个表中满足特定条件的行,对这样的需求,必须使用视图机制来实现
- 视图的缺陷:视图不可以带参数