ORACLE--排名分页

ROWNUM含义

 

  • ROWNUM 是一个伪列,对查询返回的行编号即行号,由1开始逐次递增;
  • 关键点:Oraclerownum 数值是在获取每行之后才赋予的;

 

 

举例说明:

 

SQL> selectrownum,ename,job,sal from emp where rownum=1;

    ROWNUM ENAME      JOB             SAL

-------------------- --------- ---------

         1 SMITH      CLERK        800.00

 

 

SQL> selectrownum,ename,job,sal from emp where rownum=2;

    ROWNUM ENAME      JOB             SAL

-------------------- --------- ---------

 

SQL> selectrownum,ename,job,sal from emp where rownum<=6;

    ROWNUM ENAME      JOB             SAL

-------------------- --------- ---------

         1 SMITH      CLERK        800.00

         2 ALLEN      SALESMAN    1760.00

         3 WARD       SALESMAN    1250.00

         4 JONES      MANAGER     2975.00

         5 MARTIN     SALESMAN   1250.00

         6 BLAKE      MANAGER     2850.00

 

SQL> selectrownum,ename,job,sal from emp where rownum between 2 and 6;

    ROWNUM ENAME      JOB             SAL

-------------------- --------- ---------

 

 

SQL> selectrownum,ename,job,sal from emp where rownum between 1 and 6;

    ROWNUM ENAME      JOB             SAL

-------------------- --------- ---------

         1 SMITH      CLERK        800.00

         2 ALLEN      SALESMAN    1760.00

         3 WARD       SALESMAN    1250.00

         4 JONES      MANAGER     2975.00

         5 MARTIN     SALESMAN   1250.00

         6 BLAKE      MANAGER     2850.00

 

总结:有上述几个例子可以说明,rownum的运行机制

 

1)、首先从表里面查询出数据,然后将数据进行编号(编号始终是从1开始的)

2)、编完号后,再通过where后面的查询条件对数据进行过滤

 

rownum=1时,正好匹配,则将查询出的数据进行输出

rownum=2时,无法匹配,则将编号为rownum=1的数据进行过滤,紧接着查询第二条数据,继续从1开始编号…...匹配……

 

 

分页

 

SQL> selectrn,ename,job,sal from (select rownum rn,ename,job,sal from emp whererownum<=6) where rn>=4;

        RN ENAME      JOB             SAL

-------------------- --------- ---------

         4 JONES      MANAGER     2975.00

         5 MARTIN     SALESMAN   1250.00

         6 BLAKE      MANAGER     2850.00

 

解析:将select rownum rn,ename,job,sal from emp whererownum<=6 看做一个临时的中间表,从而可以实现将中间表中的数据随意取出。

 

 

 

先排序,再取出

SQL> selectrn,ename,job,sal from (select rownum rn,ename,job,sal from (selectename,job,sal from emp order by sal desc) where rownum<=6) where rn>=4;

        RN ENAME      JOB             SAL

-------------------- --------- ---------

         4 JONES      MANAGER     2975.00

         5 BLAKE      MANAGER     2850.00

         6 CLARK      MANAGER     2450.00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值