1视图查询
【例8.18]建立“计算机系”(CS表示计算机系)学生的视图如下,并要求进行修改、
插入操作时保证该视图只有计算机系的学生。
CREATE VIEW CS- Student
AS SELECT Sno,Sname,Sage,Sex
FROM Student
WHERE SD='CST
WITH CHECK OPTION;
此时要查询计算机年龄小于20岁的学号及年龄的SQL语句如下:
SELECT Sno,Sage FORM CS- Student WHERE SD='CS' AND Sage<20;
系统执行该语句时,通常先将其转换成等价的对基本表的查询,然后执行查询语句。即当查询视图表时,系统先从数据字典中取出该视图的定义,然后将定义中的查询语句和对该视图
的查询语句结合起来,形成一个修正的查询语句。对上例修正之后的查询语句为:
SELECT Sno,Sage FORM Student WHERE SD='CS' AND Sage<20;
2.视图更新
SQL对视图更新必须遵循以下规则:
(1)从多个基本表通过连结操作导出的视图不允许更新。
(2)对使用了分组、集函数操作的视图则不允许进行更新操作。
(3)如果视图是从单个基本表通过投影、选取操作导出的则允许进行更新操作,且语法同基本表。
3.With子句
With子句是在SQL99中引入的,目前只有部分数据库支持这一子句。如果我们将一个复杂查询分解成一些小视图,然后将它们组合起来,就像将一个程序按其任务分解成一些过程一样,使得复杂查询的编写和理解都会简单得多。然而和过程定义不同的是Create view子句会在数据库中建立视图定义,该视图定义会一直保存,直到执行drop view命令。但是,With子句提供了定义一个临时视图的方法,该定义只对With子句出现的那条查询有效。