一、创建视图
语句格式
CREATE VIEW <视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
1、子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则决定具体系统的实现
2、WITH CHECK OPTION:对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
注:修改基表的结构后,可能导致表与视图的映象关系被破坏,从而导致该视图不能正确工作
例1:建立信息系学生的视图
CREATE VIEW IS_Student
AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept= 'IS';
例2:建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生
CREATE VIEW IS_Student
AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept= 'IS'
WITH CHECK OPTION;
1、基于多个基表的视图
例3:建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩)
CREATE VIEW IS_S1(Sno,Sname,Grade)
AS SELECT Student.Sno,Sname,Grade FROM Student,SC
WHERE Sdept= 'IS' AND Student.Sno=SC.Sno AND SC.Cno= '1';
2、基于视图的视图
例4:建立信息系选修了1号课程且成绩在90分以上的学生的视图
// IS_S2 基于视图IS_s1:FROM IS_S1
CREATE VIEW IS_S2
AS SELECT Sno,Sname,Grade FROM IS_S1 WHERE Grade>=90;
3、带表达式的视图
例5:定义一个反映学生出生年份的视图
// 表达式:2014-Sage
CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS SELECT Sno,Sname,2014-Sage FROM Student;
4、分组视图
例6:将学生的学号及平均成绩定义为一个视图
// 分组:GROUP BY
CREAT VIEW S_G(Sno,Gavg)
AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;
二、删除视图
语句的格式:
DROP VIEW <视图名>[CASCADE];
- 该语句从数据字典中删除指定的视图定义
- 如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除
- 删除基表时,由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除
三、查询视图
查询视图与查询基本表相同
例子:在信息系学生的视图中找出年龄小于20岁的学生
SELECT Sno,Sage FROM IS_Student WHERE Sage<20;
四、更新视图
更新视图和更新基本表相同
注:一些视图是不可更新的——当对视图的更新无法转换成对基本表SC的更新时,如修改平均成绩视图中某个学生的平均成绩不可实现
例:
// 插入
INSERT INTO IS_Student VALUES(‘201215129’,’赵新’,20);
// 修改
UPDATE IS_Student SET Sname= '刘辰' WHERE Sno= ' 201215122 ';
// 删除
DELETE FROM IS_Student WHERE Sno= ' 201215129 ';
更多推荐
数据库 之视图基本操作SQL语句
发布评论