Oracle SQL精粹:查询部门平均薪资与管理者统计

需积分: 15 2 下载量 72 浏览量 更新于2024-07-23 收藏 707KB PPT 举报
"Oracle经典SQL查询技巧" 在Oracle数据库中,SQL是用于处理数据的核心语言。本资源聚焦于几个Oracle SQL的经典应用场景,包括提取日期组件、查找平均工资最低的部门、找出高于部门平均薪资的员工以及展示部门管理者数量。 1. 提取日期组件: Oracle SQL提供了`EXTRACT`函数来获取日期字段的特定部分,如年、月、日。例如,`SELECT EXTRACT(YEAR FROM SYSDATE) YEAR FROM DUAL;`将返回当前系统的年份,`SELECT EXTRACT(MONTH FROM SYSDATE) MONTH FROM DUAL;`则返回月份,而`SELECT EXTRACT(DAY FROM SYSDATE) DAY FROM DUAL;`则给出当前日期的日。 2. 查询平均工资最低的部门及工资: 要找到平均工资最低的部门,可以使用子查询配合`ROWNUM`功能。首先,子查询计算每个部门的平均工资并按升序排列,然后外部查询选择`ROWNUM = 1`的结果,即平均工资最低的部门。例如: ```sql SELECT a.deptno, a.avg_sal FROM (SELECT d.deptno, AVG(e.sal) avg_sal FROM dept d, emp e WHERE d.deptno = e.deptno GROUP BY d.deptno ORDER BY avg_sal) a WHERE ROWNUM = 1; ``` 3. 查询大于本部门平均工资的员工: 有两种方法可以实现这一查询。首先,可以在`WHERE`子句中嵌入子查询,比较员工薪资与同部门平均薪资: ```sql SELECT ename, sal, deptno FROM emp WHERE e.sal > (SELECT AVG(sal) FROM emp WHERE e.deptno = deptno); ``` 其次,可以将子查询放在`FROM`子句中,通过关联条件进行比较: ```sql SELECT e1.ename, e1.sal, e1.deptno FROM emp e1, (SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) e2 WHERE e1.sal > e2.avg_sal AND e1.deptno = e2.deptno; ``` 4. 查询各部门管理者的分布情况: 要查看哪些部门有管理者(即非NULL的`MGR`字段),可以使用`COUNT(DISTINCT(MGR))`结合`GROUP BY`,来统计每个部门中不同管理者的数量: ```sql SELECT COUNT(DISTINCT(mgr)), deptno FROM emp WHERE mgr IS NOT NULL GROUP BY deptno; ``` 这个查询会显示每个部门拥有独立管理者的数量。 这些Oracle SQL查询技巧在日常数据库操作中非常实用,可以帮助用户高效地处理和分析数据。掌握这些技巧,将使你在数据库管理中更加得心应手。