l 视图创建
CREATVIEW 视图名 列名
AS 子查询
[WITHCHECK OPTION]
[WITH CHECK OPTION]:
当用视图进行UPDATE\INSERT\DELETE 进行更新、插入、删除时的行需要满足子查询
子查询可以是任意SELECT语句
视图的属性列名可以全部省略或指定
1.全部省略的话由子查询中SELECT中列的诸字段组成。
2.明确指定试图的所有列名的话:
某个目标列是聚集函数或列表达式
多表连接时选出几个同名列作为视图的字段
需要在视图中为某个列启用新的更适合的名字
关系数据库管理系统执行CREATE VIEW语句中,只是将视图存入字典,不执行SELECT语句。
行列子集视图:从一个表中导出,但是只保留了一些行一些列。比如IS_Student为行列子集视图。
CREATEVIEW IS_Student
AS
SELECTSno,Sname,Sage
FROMStudent
WHERESdept= ‘IS’
WITHCHECK POTION 插入、删除、更新数据时都只能是IS系的学生
建立信息系选修了1号课程的学生的视图
CREATEVIEW IS_S1 (Sno,Sname,Grade)
AS
SELECTStudent.Sno,Sname,Grade
FROMStudent,SC
WHERESdept=’IS’AND
Student.Sno=SC.Sno AND
SC.Cno=’1’
基于视图的视图:求建立信息系选修了1号课程的学生,且成绩大于90的学生
CREATEVIEW IS_S2
AS
SELECT Sno,Sname,Grade
FROMIS_S1
WHEREGrade>=90
基于表达式的视图:
分组视图:
将学生的学号和平均成绩定义为一个视图
CREATEVIEW S_G(Sno,Grade)
AS
SELECTSno,(AVG)Grade
FROMSC
GROUPBY Sno
视图定义时不建议用*,防止来源表发生改变,视图不能一致。
l 视图删除:DROP VIEW 视图名[CASCADE]
CASCADE可选,可以将该视图导出的所有视图一并删除。
l 查询视图
用户角度:查询视图与查询基本表相同
数据库管理系统:视图消解法:有效检查、转化等价基本表、修正后查询
SELECTSno,Sage
FROMIS_Student
WHERESage<20
转化为: SELECTSno,Sage
FROM Student
WHERE Sdept=’IS’ AND Sage<20
视图消解法也有局限性,不能生成新的视图
SELECT*
FROMS_G
WHEREGavg>=90
SELECTSno,AVG(Grade)
FROMSC
GROUPBY Sno
HAVINGAVG(Grade)>=90
SELECT*
FROM(SELECT Sno,AVG(Grade)
FROMSC
GROUPBY Sno) AS S_G(Sno,Gavg)
WHEREGavg>=90
l 更新视图
将信息系学生视图IS_ Student中学号201215122的学生姓名改为“刘辰“
UPDATEIS_Student
SETSname=’刘辰‘
WHERESno=’201215122’
UPDATEStudent
SETSname=’刘辰‘
WHERESno=’201215122’ AND Sdept=’IS’
插入视图
INSERT
INTOIS_Student
VALUES(‘201215122’,’赵新’,20,’IS’)
删除201215122
DELEAT
FROMIS_Student
WHERESno=’201215129’
一些视图是不能更新的,因为对视图的更新不能唯一地有意义地转换成对基本表的更新。比如平均成绩不能更新。行列子集视图进行更新。不能更新的视图定义的视图也不能更新。