【问题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.部门号;