Oracle数据库查询技巧:排序与筛选高薪员工

需积分: 2 2 下载量 89 浏览量 更新于2024-08-26 收藏 4.59MB PPT 举报
"Oracle数据库课堂练习" 在Oracle数据库的学习过程中,常常会涉及到一些查询操作和数据排序的技巧。本课堂练习主要涵盖三个问题:找出员工表中工资最高的前三名员工,找出薪水高于所在部门平均薪水的员工,以及统计每年入职的员工数量。这些问题都需要利用到SQL查询语言中的关键功能,如`SELECT`语句、`WHERE`子句以及`ORDER BY`子句。 首先,我们要解决的第一个问题是找出员工表中工资最高的前三名员工。这需要用到`ORDER BY`子句来对工资进行降序排序,再结合`LIMIT`或`FETCH FIRST`来限制返回的行数。在Oracle中,没有直接的`LIMIT`关键字,但可以使用`ROWNUM`伪列配合子查询来实现类似的功能。例如: ```sql SELECT * FROM ( SELECT * FROM employee ORDER BY salary DESC ) WHERE ROWNUM <= 3; ``` 第二个任务是找出薪水高于所在部门平均薪水的员工。这需要先计算每个部门的平均薪水,然后在主查询中通过`JOIN`操作将这个条件与员工表关联起来。假设我们有一个`department`表,包含部门ID和部门名称等字段,可以这样写: ```sql SELECT e.* FROM employee e JOIN ( SELECT department_id, AVG(salary) as avg_salary FROM employee GROUP BY department_id ) d ON e.department_id = d.department_id WHERE e.salary > d.avg_salary; ``` 第三个任务是统计每年入职的员工数量。这需要用到`GROUP BY`子句对入职年份进行分组,然后使用`COUNT()`函数计算每组的数量。假设`hire_date`字段记录了员工的入职日期,可以这样查询: ```sql SELECT EXTRACT(YEAR FROM hire_date) as hire_year, COUNT(*) as num_employees FROM employee GROUP BY EXTRACT(YEAR FROM hire_date); ``` 在SQL中,`ORDER BY`子句用于对查询结果进行排序,默认的排序顺序是升序(ASC),数值从小到大,日期从早到晚,字符按字母顺序排列。如果需要降序排序,可以添加`DESC`关键字。同时,`ORDER BY`还可以接受别名或列位置作为排序条件,并且可以对多列进行排序,通过逗号分隔列名并指定排序顺序。 通过这些练习,我们可以加深对Oracle数据库查询和数据处理的理解,进一步提升在实际工作中处理复杂查询的能力。