首页 > 数据库技术 > 详细

oracle多表查询(四)

时间:2018-11-20 22:11:56      阅读:191      评论:0      收藏:0      [点我收藏+]

范例:要求统计出每个部门的详细信息,并且要求这些部门的平均工资高于2000;

在以上程序的基础上完成开发,在之前唯一所学习的限定查询的语法只有WHERE子句,所以下面先使用WHERE完成要求。

 

 

SELECT d.DEPTNO 部门编号,d.DNAME 部门名称,d.LOC 部门位置, coalesce(trunc(avg(e.SAL)),0) 平均薪资
FROM EMP e,DEPT d WHERE e.DEPTNO=d.DEPTNO AND coalesce(trunc(avg(e.SAL)),0)>2000 GROUP BY d.DEPTNO,d.DNAME,d.LOC

技术分享图片

where的子句中是不允许出现分组函数的,这主要是因为where是从所有数据中第一步筛选。

例如,我们对动物进行分类,先用where找出在陆地上生存的,再用group by分出哪些是爬的,哪些是走的。如果需要对group by之后的数据再进行筛选就需要使用having

刚才的查询应该这么写:

SELECT d.DEPTNO 部门编号,d.DNAME 部门名称,d.LOC 部门位置, coalesce(trunc(avg(e.SAL)),0) 平均薪资
FROM EMP e,DEPT d WHERE e.DEPTNO=d.DEPTNO GROUP BY d.DEPTNO,d.DNAME,d.LOC HAVING coalesce(trunc(avg(e.SAL)),0)>2000

技术分享图片

where和having的区别:

where是在group by之前进行筛选,表示对全部数据进行筛选,在where中不能使用统计函数

having是在group by之后进行筛选,可以使用统计函数


 思考题:显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$4000,输出结果按月工资的合计升序排列:

SELECT sum(SAL) 工资合计,job 工作名称 FROM EMP WHERE JOB IN (SELECT JOB FROM EMP WHERE JOB!=‘SALESMAN‘) 
GROUP BY JOB HAVING sum(sal)>4000 ORDER BY 1;

技术分享图片

 

oracle多表查询(四)

原文:https://www.cnblogs.com/HUCHEN/p/9991774.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!