视图
删除视图
语句的格式:
DROP VIEW <视图名>;
该语句从数据字典中删除指定的视图定义
如果该视图上还导出了其他视图,使用
CASCADE
级联删除语句,把该视图和由它导出的所有视图一起删除
删除基表时,由该基表导出的所有视图定义都必须显式地使用
DROP VIEW
语句删除
例如:
删除视图BT_S:
DROP VIEW BT_S;
删除视图IS_S1:
DROP VIEW IS_S1;
拒绝执行
级联删除:
DROP VIEW IS_S1 CASCADE;
查询视图
用户角度:查询视图与查询基本表相同
RDBMS
实现视图查询的方法
视图消解法(
View Resolution
)
进行有效性检查
转换成等价的对基本表的查询
执行
修正
后的查询
例如
在信息系学生的视图中找出年龄小于20岁的学生。
SELECT Sno,Sage
FROM IS_Student
WHERE Sage<20;
IS_Student视图的定义 (参见视图定义例1)
视图消解转换后的查询语句为:
SELECT Sno,Sage
FROM Student
WHERE Sdept= 'IS' AND Sage<20;
例如
查询选修了1号课程的信息系学生
SELECT IS_Student.Sno,Sname
FROM IS_Student,SC
WHERE IS_Student.Sno =SC.Sno AND SC.Cno= '1';
视图消解法的局限
有些情况下,视图消解法不能生成正确查询。
例如
在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩
SELECT *
FROM S_G
WHERE Gavg>=90;
S_G视图的子查询定义:
CREATE VIEW S_G (Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;
错误:
SELECT Sno,AVG(Grade)
FROM SC
WHERE AVG(Grade)>=90
GROUP BY Sno;
正确:
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90;