oracle表复杂查询

说明:在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据。

1)数据分组-max,min,avg,sum,count
?如何显示所有员工中最高工资和最低工资
SQL> select max(sal),min(sal) from emp;

?如何显示所有员工中最高工资的所有者
SQL> select ename,sal from emp where sal=(select max(sal) from emp);

?如何显示所有员工中最高工资的所有者的全部信息
SQL> select * from emp where sal=(select max(sal) from emp);

?如何显示所有员工中最高工资和最低工资的所有者的全部信息
SQL> select * from emp where sal=(select max(sal) from emp) or sal=(select min(sal) from emp);

?显示所有员工的平均工资和工资总和
SQL> select avg(sal),sum(sal) from emp;

?计算共有多少员工
SQL> select count(*) from emp;

?计算共有多少个员工有上级
SQL> select count(mgr) from emp;



拓展要求:
?请显示工资最高的员工的名字,工作岗位
SQL> select ename,job from emp where sal=(select max(sal) from emp);

?请显示工资高于平均工资的员工信息
SQL> select * from emp where sal>(select avg(sal) from emp);

1)group by和having子句
group by用于对查询的结果分组统计
having子句用于限制分组显示结果

?如何显示每个部门的平均工资和最高工资
SQL> select avg(sal),max(sal),deptno from emp group by deptno;
意思就是按部门来进行相关的计算

?显示每个部门的每种岗位的平均工资和最低工资
SQL> select avg(sal),min(sal),deptno,job from emp group by deptno,job order by deptno;

?显示每个部门的每个岗位的平均工资、最低工资、最高工资、岗位的人数
SQL> select avg(sal),min(sal),max(sal),count(sal),deptno,job from emp group by deptno,job order by deptno;

?显示平均工资低于2000的部门号和它的平均工资(使用having)
SQL> select avg(sal),deptno from emp group by deptno having avg(sal)<2000;

having的作用就是做二次筛选

?显示岗位有MANAGER的部门和它的最大工资和最小工资
SQL> select avg(sal),min(sal),max(sal),deptno,job from emp group by deptno,job having job='MANAGER';

?显示平均工资高于2000并且有PRESIDENT岗位的部门号
SQL> select deptno from emp group by deptno,job having avg(sal)>2000 and job='PRESIDENT';

猜你喜欢

转载自1124117571.iteye.com/blog/2284715