阅读下列说明,回答问题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.部门号;