问答题
[问题4]查询每个部门中月工资最高的“职工号”的SQL查询语句如下: Select职工号 from 职工E
where月工资=(Select Max(月工资)
from职工as M
where M.部门号=E.部门号)
(1)请用30字以内文字简要说明该查询语句对查询效率的影响。
(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。
【正确答案】
【答案解析】[问题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.部门号
[问题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.部门号