8.4.9 视图査询与更新

2025-06-05 14:32:29 更新

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子句出现的那条查询有效。