oracle 数据库创建账号2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工

ROWNUM的知识点

A ROWNUM按照oracle的默认机制生成。

B rownum只能使用<= <号,不能使用> >=

rownum的实现机制

rownum表示,返回的结果集的行号(是一个属性,固化到一行之中,不会因为你排序,而发生变化)。没有第一行,就没有第二行;没有第二行就没有第三行。

Oracle Top-N

select rownum,empno,ename,sal

from (select empno,ename,sal

from emp

order by sal desc)

where rownum <= 3;

 

4 求5=<x&loracle账号t;=8之间的数据(分页)

select r,empno,ename,sal

from

(

select rownum r,empno,ename,sal

from (

select empno,ename,sal

from emp

order by sal desc

)

where rownum <=8

)

where r >= 5;

 

总结:内存排序,外层选

Oracle分页思想总结:

(内层排序,外层选,需要三层查询)

内:排序

中:使用rownum选择前n条;并给rownum指定一个别名,以供最外层过滤使用。

外:去掉前m条结果。

找到员工表中薪水大于本部门平均薪水的员工

员工表 本部门平均薪水

思路1:查员工的薪水 本部门平均薪水

本部门关系

要去本部门的薪水,需要求部门的薪水,要对部门分组è分组

思路2:查找员工表和 部门薪水表 =====》多表查询

思路3:等值连接条件

方法1:

select e.empno,e.ename,e.sal,d.avgsal

from emp e,

(select deptno,avg(sal) avgsal

from emp

group by deptno) d

where e.deptno=d.deptno and e.sal > d.avgsal;

 

方法2

相关子查询:主查询的参数,让子查询用,一般是通过别名技术。

一般子查询:子查询的结果,被主查询使用

select empno,ename,sal,(select avg(sal) from emp where deptno = e.deptno) avgsal

from emp e

where sal > (

select avg(sal)

from emp

where deptno = e.deptno

);

 

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。