Oracle单表的复杂查询
select avg (sal), max (sal),deptno from emp group by deptno;
select avg (sal), max (sal),deptno from emp group by deptno having avg (sal)> 2000 order by deptno;
查询工资高于 500 或者是岗位为 MANAGER 的雇员,同时还要满足他们的姓名首字母为大写的 J ?
select * from emp where (sal> 500 or job= 'manager' ) and ename like 'J%' ;
按照部门号升序而雇员的工资降序排列
select * from emp order by deptno asc , sal desc ;
select (sal+ nvl (comm, 0 ))* 12 as sum ,ename from emp order by sum ;
求最高工资和最低工资
select max (sal), min (sal) from emp ;
查询最高工资员工的名字,工作岗位
select ename,sal from emp where ( select max (sal) from emp )=sal;
显示工资高于平均工资的员工信息
select * from emp where sal>( select avg (sal) from emp);
group by
和
having
子句
group by
用于对查询的结果分组统计,
having
子句用于限制分组显示结果。
如何显示每个部门的平均工资和最高工资
select avg (sal), max (sal),deptno from emp group by deptno;
显示每个部门的每种岗位的平均工资和最低工资?
select avg (sal), max (sal), min (sal),deptno,job from emp group by deptno,job;
显示平均工资低于 2000 的部门号和它的平均工资?
select avg (sal), max (sal),deptno from emp group by deptno having avg (sal)> 2000 order by deptno;
对数据分组的总结:
1
分组函数只能出现在选择列表、
having
、
order by
子句中
(
不能出现在
where
中
)
2
如果在
select
语句中同时包含有
group by, having, order by
那么它们的顺序是
group by, having, order by
3
在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在
group by
子句中,否则就会出错。
如
SELECT deptno, AVG(sal), MAX(sal) FROM emp GROUP by deptno HAVING AVG(sal) < 2000;