题库 题库

【简答题】

试题二(20分)
    阅读下列说明,回答问题1至问题5,将解答填入答题纸的对应栏内。
【说明】
    某工厂的信息管理数据库的部分关系模式如下所示:
    职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)
    部门(部门号,部门名,负责人代码,任职时间)
    关系模式的主要属性、含义及约束如表2-1所示,“职工”和“部门”的关系示例分别如表2-2和表2-3所示。
 
 

 
【问题1】根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内容。(6分)
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)(职工号),
    (b)(部门号),
                    CHECK ( (d) ));
    Create View D_S(D,C,Totals,Averages) As
                    ( Select 部门号, (e)
                    from 职工
(f))

【问题2】对于表2-2、表2-3所示的“职工”和“部门”关系,请指出下列各行是否可以插入,为什么?(3分)
 
【问题3】在问题1定义的视图D_S上,下面哪个查询或更新是允许执行的,为什么?(3分)
    (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;
【问题4】查询每个部门中月工资最高的“职工号”的SQL查询语句如下:
    Select 职工号 from 职工 E
    where 月工资=(Select Max(月工资)
                    from 职工 as M
                    where M. 部门号=E. 部门号)
    (1)请用30字以内文字简要说明该查询语句对查询效率的影响。(3分)
    (2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。(3分)
【问题5】假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的Select查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的SQL语句。(2分)
    Select 姓名,年龄,月工资 from 职工
    where 年龄>45 or 月工资<1000;

参考答案

[问题1]
    (a)PRIMARY KEY
    (b)FOREIGN KEY(负贵人代码) REFERENCES 职工
    (c)FOREIGN KEY(部门号)REFERENCES部门
    (d)月工资>=500 AND 月工资<=5000
    (e)coumt(*),Sum(月工资),Avg(月工资)
    (f)Croup by 部门号
[问题2]
    (1)该行不能插入“职工”关系,它违反了实体完整性中主码必须唯一区分关系中的每一个属性。
    (2)该行可以插入“职工”关系,尽管部门号、电话和办公室为空,但是它表示该雇员没有分配到某个部门。
    (3)该行不能插入“职工”关系,它违反了参照完整性。因为6在关系“部门”中不存在。
[问题3]
    此问考查的是对视图定义的掌握。
    (1)和(2)都不能更新,因为使用分组合聚集函数定义的视图是不可更新的。 (3)不一定,视子查询的返回值而定,(4)和(5)允许查询。
[问题4]
    此间考察的是查询效率的问题。在涉及相关查询的某些情形中,构造临时关系可以提高查询效率。
    (1)对于外层的职工关系E中的每一个元组,都要对内层的整个职工关系M进行检索,因此查询效率不高。
    (2)解答一
    改正后的SQL语句使用了临时表:
    Select Max(月工资)as 最高工资,部门号 into Temp from职工
    Group by部门号
    Select 职工号 from职工,Temp
    where月工资=最高工资 and 职工.部门号=Temp.部门号
    解答二
    Select 职工号 from 职工,(Select Max(月工资) as 最高工资,部门号
    Group by 部门号) as depMax
    where 月工资=最高工资 and 职工.部门号=depMax.部门号
[问题5]
    此问主要考察在查询中注意where子句中使用索引的问题。
    Select 姓名,年龄,月工资 from 职工
    where 年龄>45;
    union
    Select 姓名,年龄,月工资 from 职工
    where 年龄 月工资<1000;

相关试题