(1)查询每个部门中月工资最高的“职工号”的SQL查询语句如下:
SELECT 职工号 FROM 职工 E
WHERE 月工资=(SELECT MAX(月工资)
FROM 职工 AS M
WHERE
M.部门号=E.部门号); ①请用30字以内的文字简要说明该查询语句对查询效率的影响。
②对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。
【正确答案】
【答案解析】此问考查的是查询效率的问题。在涉及相关查询的某些情形中,构造临时。关系可以提高查询效率。
①对于外层的职工关系E中的每一个元组,都要对内层的整个职工关系M进行检索,因此查询效率不高。
②解答方法一 (先把每个部门最高工资的数据存入临时表,再对临时表进行查询):
SELECT MAX (月工资) As最高工资,部门号 Into Temp FROM 职工
GROUP BY 部门号;
SELECT 职工号 FROM 职工,Temp
WHERE 月工资=最高工资 AND职工.部门号=Temp.部门号;
解答方法二 (直接在FROM子句中使用临时表结构):
SELECT 职工号
FROM职工,(SELECT MAX(月工资) As最高工资,部门号
FROM 职工
GROUP BY 部门号) As depMax
WHERE 月工资=最高工资 AND职工.部门号=depMax.部门号;
问答题
(2)假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的
Select查询语句可能不会促使查询优化器使用索引,从而降低了查询效率,请写出既可以完成相同功能又可以提高查询效率的SQL语句。
SELECT 姓名,年龄,月工资 FROM职工
WHERE 年龄>45 OR月工资<1000;
【正确答案】
【答案解析】此问主要考察在查询中注意WHERE子句中使用索引的问题。既可以完成相同功能又可以提高查询效率的SQL语句如下:
(SELECT 姓名,年龄,月工资 FROM 职工
WHERE 年龄>45)
UNION
(SELECT 姓名,年龄,月工资 FROM 职工
WHERE 月工资<1000);