问题 问答题

阅读下列说明,回答问题1至问题5。

【说明】

某工厂的信息管理数据库的部分关系模式如下所示:

职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)

部门(部门号,部门名,负责人代码,任职时间)

关系模式的主要属性、含义及约束如表22-1所示,“职工”和“部门”的关系示例分别如表22-2和表22-3所示。

表22-1 主要属性、含义及约束

【问题4】

查询每个部门中月工资最高的“职工号”的SQL查询语句如下:

Select 职工号 from 职工E

Where 月工资=(Select Max(月工资)

from 职工 as M

where M. 部门号=E. 部门号);

(1)请用30字以内文字简要说明该查询语句对查询效率的影响。

(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。

答案

参考答案:

(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.部门号; 因为该SQL语句用了查询嵌套和聚集函数,所以这种方式的查询效率会受到很大的影响。可以把它改成: Select Max(月工资)As maxgz,部门号Into Temp From 职工 Group by 部门号 Select 职工号 From 职工,Temp Where 月工资=maxgz And 职工.部门号=Temp.部门号;

完形填空
多项选择题