阅读下列说明,回答问题1至问题5。
【说明】
某工厂的信息管理数据库的部分关系模式如下所示:
职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)
部门(部门号,部门名,负责人代码,任职时间)
关系模式的主要属性、含义及约束如表22-1所示,“职工”和“部门”的关系示例分别如表22-2和表22-3所示。
表22-1 主要属性、含义及约束
【问题5】
假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的
Select查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的SQL语句。
Select 姓名,年龄,月工资 from 职工
where 年龄>45 or 月工资<1000;
参考答案:
Select 姓名,年龄,月工资 From 职工 Where 年龄>45 UNION Select 姓名,年龄,月工资 From 职工 Where 月工资<1000; 因为该SQL语句用了查询嵌套和聚集函数,所以这种方式的查询效率会受到很大的影响。可以把它改成: Select Max(月工资)As maxgz,部门号Into Temp From 职工 Group by 部门号 Select 职工号 From 职工,Temp Where 月工资=maxgz And 职工.部门号=Temp.部门号; 在语句 Select 姓名,年龄。月工资 From 职工 Where 年龄>45 or 月工资<1000; 中,由于使用了条件“Or”,查询的时候变成了对全表的扫描,不会促使查询优化器使用索引,从而降低了查询效率。改正的方法是去掉“Or”,修改后的SQL语句如下: Select 姓名,年龄,月工资 From 职工 Where 年龄>45 UNION Select 姓名,年龄,月工资 From 职工 Where 月工资<1000;