Oracle学习(七)----查询Top—N问题 & 相关子查询
来源:互联网 发布:单片机基础李广弟 编辑:程序博客网 时间:2024/06/07 11:17
<pre name="code" class="plain">习题课一: 1:找到员工表中工资最高的员工的信息方法一:SQL> select * from emp 2 where sal >= all(select sal from emp); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10方法二:SQL> select * from emp 2 where sal >= (select max(sal) from emp); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 2:找到员工表中工资最高的前三名员工的信息(需要用到rownum,不会因为我们的排序而变化,也就是说,他是内置的)注: 1)rownum按照oracle的默认机制生成 2)rownum只能使用< / <= 号,不能使用 > / >= 号以上两点与rownum的实现机制有关系:rownum返回集的行号(是一个属性,固话到一行中,不会因为排序而变化),没有第一行就没有第二行...... SQL> ed已写入 file afiedt.buf 1 select rownum, ename, sal from 2 (select ename, sal from emp order by sal desc) 3* where rownum <= 3 ------注:不能用>=号,没有一哪有二SQL> / ROWNUM ENAME SAL---------- ---------- ---------- 1 tom_abc 8000 2 KING 5000 3 SCOTT 3000 3:找到员工表中工资第五名到第八名员工的信息(处理a<b<c的情况)SQL> ed已写入 file afiedt.buf 1 select r, ename, sal from 2 ( 3 select rownum r, ename, sal from -----将行幻化为实例, 中层 4 (select ename, sal from emp order by sal desc) ---- 最内层,将行号重新排序 5 where rownum <= 8 6 ) 7* where r >= 5SQL> / R ENAME SAL---------- ---------- ---------- 5 JONES 2975 6 BLAKE 2850 7 CLARK 2450 8 ALLEN 1600=======oracle分页思想总结(内层排序 外层选,需要三层查询) 内:排序。中:使用rownum选择前n条;并给rownum指定一个别名,以供最外层过滤使用。外:去掉前m条结果。习题课二: 找到员工表中薪水大于本部门平均薪水的员工。 思路1:首先本部门,那么一定会有分组,并将此作为一个表结构 思路2:查找员工表和部门薪水表====>多表查询 思路3:等值条件连接 方法一: 1 select e.deptno, e.ename, e.job, e.sal, d.avgsal avgsal from emp e, 2 (select deptno, avg(sal) avgsal from emp group by deptno ) d 3 where e.deptno = d.deptno and e.sal > d.avgsal 4* order by 1SQL> / DEPTNO ENAME JOB SAL AVGSAL---------- ---------- --------- ---------- ---------- 10 tom_abc 8000 4187.5 10 KING PRESIDENT 5000 4187.5 20 JONES MANAGER 2975 2175 20 SCOTT ANALYST 3000 2175 20 FORD ANALYST 3000 2175 30 ALLEN SALESMAN 1600 1566.66667 30 BLAKE MANAGER 2850 1566.66667 方法二:相关子查询:主查询的参数,让子查询用,一般是通过别名一般子查询:子查询的结果供主查询使用 1 select empno, ename, sal, (select avg(sal) from emp where deptno = e.deptno) salavg 2 from emp e 3 where sal > (select avg(sal) from emp where deptno = e.deptno) 4* order by 1SQL> / EMPNO ENAME SAL SALAVG---------- ---------- ---------- ---------- 1 tom_abc 8000 4187.5 7499 ALLEN 1600 1566.66667 7566 JONES 2975 2175 7698 BLAKE 2850 1566.66667 7788 SCOTT 3000 2175 7839 KING 5000 4187.5 7902 FORD 3000 2175已选择7行。
0 0
- Oracle学习(七)----查询Top—N问题 & 相关子查询
- oracle TOP n 查询
- Oracle 相关子查询
- 子查询相关问题
- oracle/mysql TOP/Button N查询
- oracle TOP-N 与分页查询
- MYSQL中查询TOP N的问题
- TOP-N类查询
- 查询TOP-N
- MySQL查询TOP(n)
- mysql子查询相关问题
- Oracle: 四、Oracle连接查询,子查询(相关子查询,嵌套子查询)
- 原创:oracle 子查询介绍 (七)
- Sql 子查询 实现分组 显示 TOP N
- oracle学习分组查询子查询
- Oracle连接查询,子查询(相关子查询,嵌套子查询)
- 高级sql学习——相关子查询和非相关子查询!!!
- Oracle学习(六):子查询
- 关于Android Studio时出现cannot resolve symbol R报错的解决方法
- InstallShield安装包制作
- 3.单行函数-数值函数
- FZU-2148-Moon Game
- package explorer的src目录下的xml文件修改的同步
- Oracle学习(七)----查询Top—N问题 & 相关子查询
- MyEclipse安装JRebel插件实现热部署
- Python 中调用其他文件的两种方法 input 和raw_input
- iOS-UIKit继承图
- 棋牌游戏通用牌型数值化方案
- EC修炼之道—代码架构
- 【项目重构】Session过期导致用户掉线
- Java加密和解密
- GC日志说明