Oracle SQL技巧:提取日期元素与查询平均工资

需积分: 15 1 下载量 143 浏览量 更新于2024-08-15 收藏 707KB PPT 举报
"这篇文章主要介绍了如何在Oracle数据库中使用SQL语句从当前时间中抽取年、月、日,以及展示了几个实用的SQL查询示例,包括查询平均工资最低的部门、找出大于本部门平均工资的员工和统计各部门管理者的分布情况。" 在Oracle SQL中,我们可以使用`EXTRACT`函数来获取日期字段的特定部分,如年、月和日。在提供的示例中,`SYSDATE`是Oracle中的一个内置函数,它返回当前系统日期和时间。以下是如何使用`EXTRACT`函数从`SYSDATE`中抽取年、月、日: ```sql SELECT EXTRACT(YEAR FROM SYSDATE) AS 年份 FROM DUAL; SELECT EXTRACT(MONTH FROM SYSDATE) AS 月份 FROM DUAL; SELECT EXTRACT(DAY FROM SYSDATE) AS 日份 FROM DUAL; ``` 这些查询分别返回当前日期的年份、月份和日份。 接下来,我们来看一个查询平均工资最低的部门及其平均工资的例子: ```sql SELECT a.deptno, a.avg_sal FROM (SELECT d.deptno, AVG(e.sal) AS avg_sal FROM dept d, emp e WHERE d.deptno = e.deptno GROUP BY d.deptno ORDER BY avg_sal) a WHERE ROWNUM = 1; ``` 这个查询首先计算每个部门的平均工资,然后按平均工资升序排序,最后通过`ROWNUM = 1`选择平均工资最低的部门。 此外,查询大于本部门平均工资的员工有以下两种方法: 1. 将查询平均工资的子查询放在`WHERE`子句中: ```sql SELECT e.ename, e.sal, e.deptno FROM emp e WHERE e.sal > (SELECT AVG(sal) FROM emp WHERE e.deptno = deptno); ``` 2. 或者将子查询放在`FROM`子句中: ```sql SELECT e1.ename, e1.sal, e1.deptno FROM emp e1, (SELECT AVG(sal) AS avg_sal, deptno FROM emp GROUP BY deptno) e2 WHERE e1.sal > e2.avg_sal AND e1.deptno = e2.deptno; ``` 这两个查询都是为了找出工资高于所在部门平均工资的员工,只是实现方式略有不同。 最后,我们来看如何查询各部门管理者的分布情况: ```sql SELECT COUNT(DISTINCT mgr) AS 管理者数量, deptno FROM emp WHERE mgr IS NOT NULL GROUP BY deptno; ``` 这个查询统计了每个部门中不为空(即有管理者)的`mgr`字段的数量,展示了各部门管理者的分布。 以上就是Oracle SQL中关于日期提取、子查询以及聚合函数的运用,它们在实际数据库操作中非常常见且实用。通过这些技巧,你可以更有效地对数据进行分析和查询。