阅读下列说明,回答问题1至问题5。
【说明】
某工厂的信息管理数据库的部分关系模式如下所示:
职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)
部门(部门号,部门名,负责人代码,任职时间)
关系模式的主要属性、含义及约束如表22-1所示,“职工”和“部门”的关系示例分别如表22-2和表22-3所示。
表22-1 主要属性、含义及约束
【问题3】
在问题1定义的视图D_S上,下面哪个查询或更新是允许执行的,为什么?
(1)Update D_S set D=3
where D=4;
(2)Delete from D_S where C>4;
(3)Select D,Averages from D_S
where C>(Select C from D_S
where D=:dept);
(4)Select D,C from D_S
where
Totals>10000;
(5)Select* from D_S
参考答案:
(1)和(2)都不能执行,因为使用分组和聚集函数定义的视图是不可更新的。 (3)不一定能执行,具体要看视图的返回值的情况。 (4)和(5)可以执行,因为给出的SQL语句与定义D_S视图的SQL语句合并起来验证有效。 做这种类型的题目时,只要把题目给出的SQL语句与定义该视图的SQL语句合并起来验证是否有效即可。在问题1的分析中,我们已经求出了定义该视图的SQL语句如下: Create View D_S(D,C,Totals,Averages)AS (Select 部门号,Count (职工号), SUN (月工资),AVG (月工资) From 职工 Group by 部门号) (1)合并结果为:Update职工Set部门号=3 Where 部门号 =4 Group by 部门号。因为Where中不能包括Group聚合函数,因此不能执行。(2)合并结果为:Delete From 职工Where Count(职工号)>4 Group by 部门号,因此也不能执行。 (3)这种要看视图的返回值的情况。因此不一定能执行。 (4)可以。 (5)显然该语句能执行。