Oracle SQL精粹:查询部门平均薪资与管理者统计
需积分: 15 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查询技巧在日常数据库操作中非常实用,可以帮助用户高效地处理和分析数据。掌握这些技巧,将使你在数据库管理中更加得心应手。
168 浏览量
2014-02-28 上传
2011-06-20 上传
2024-06-02 上传
2023-12-02 上传
2023-05-13 上传
2023-06-06 上传
2023-03-16 上传
2023-06-09 上传
穆易
- 粉丝: 0
- 资源: 11