根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内容。 Create Table 部门 (部门号 CHAR(1) (a)

admin2005-03-20  39

问题 根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内容。
   Create Table 部门 (部门号    CHAR(1)  (a),
                 部门名          CHAR(16),
                 负责人代码      CHAR(4),
                 任职时间        DATE,
                         (b)        (职工号));
   Create Table职工(职工号      CHAR(4),
                姓名           CHAR(8),
                年龄           NUMBER(3),
                月工资         NUMBER(4),
                部门号         CHAR(1),
                电话           CHAR(8),
                办公室         CHAR(8),
                         (a)  (职工号),
                         (c) (部门号),
                CHECK((d)));
   Create View D_S(D,C,Totals,Averages)As
                  (Select 部门号, (e)     
                        from  职工
                               (f) );
在问题1定义的视图D_S上,下面哪个查询或更新是允许执行的,为什么?
    (1)Update D_S set D-3 where D=4;
   (2)Delete from D_Swhere 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语句与定义该视图的 SQL语句结合起来考虑。由于SQL视图更新必须遵循以下规则:
   ▲  从多个基本表通过连接操作导出的视图不允许更新。
   ▲  对使用了分组、集函数操作的视图则不允许进行更新操作。
   ▲  如果视图是从单个基本表通过投影、选取操作导出的则允许进行更新操作,且语法同基本表。
   (1)由于D_S视图中包含分组操作,也即将D_S视图合并到Update D_S set D=3 where D=4,结果为:Update 职工 set 部门号=3 where 部门号=4 GROUP BY 部门号,在 where 中包括 GROUP 分组操作,因此不能执行。
   (2)同理,将D_S视图合并到Delete from D_S where C>4中,结果为:Delete from职工where COUNT(职工号)>4 GROUP BY部门号,因此不能执行。
    (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显然是能执行的。
转载请注明原文地址:https://kaotiyun.com/show/k8UZ777K
0

相关试题推荐
最新回复(0)