zoukankan      html  css  js  c++  java
  • oracle 中 rownum 和 row_number()

      简单的介绍下oracle 中rownum 和 row_number() 使用,实例演示。

      参照:http://www.cnblogs.com/zjrstar/archive/2006/08/31/491090.html  

      我们先创建一个例子用以说明,偷个懒,就用上面那位童鞋的。

    create table student (ID char(6), name VARCHAR2(10));
    insert into student values('200001','张一');
    insert into student values('200002','王二');
    insert into student values('200003','李三');
    insert into student values('200004','赵四');
    commit;

    1)

    SQL> select * from student where rownum>=1;

    ID NAME
    ------ ----------
    200001 张一
    200002 王二
    200003 李三
    200004 赵四

    2)

    SQL> select rownum ,t.* from student t where rownum>=1;

    ROWNUM ID NAME
    ---------- ------ ----------
    1 200001 张一
    2 200002 王二
    3 200003 李三
    4 200004 赵四

    3)

    SQL> select rownum ,t.* from student t where rownum <3;

    ROWNUM ID NAME
    ---------- ------ ----------
    1 200001 张一
    2 200002 王二

    4)

    SQL> select rownum ,t.* from student t where rownum >=2;

    未选定行

    SQL>

    Why?=>1.rownum是一个伪列;rownum总是从1开始,连续不断。

    5)

    SQL> select rownum,t.* from student t order by name desc;

    ROWNUM ID NAME
    ---------- ------ ----------
    4 200004 赵四
    1 200001 张一
    2 200002 王二
    3 200003 李三

    6)

    SQL> select row_number() over(order by name desc) rn ,t.* from student t;

    RN ID NAME
    ---------- ------ ----------
    1 200004 赵四
    2 200001 张一
    3 200002 王二
    4 200003 李三

    以上5)和6)可以做比较:为什么两者的结果rownum和rn不同,注意row_number() over(...)用法。

    7)

    SQL> select * from (select rownum rn,t.* from student t) tt where tt.rn between
    2 and  3;

    RN ID NAME
    ---------- ------ ----------
    2 200002 王二
    3 200003 李三

    这种方式可以分页取数据,但是请记得上述的5),伪列rownum不是有序的;如果要进行排序的话,请尽量使用 rownumber() over(...)

    8)

    SQL> select * from (select row_number() over(order by name desc) rn ,t.* from st
    udent t) tt where tt.rn between 2 and 3;

    RN ID NAME
    ---------- ------ ----------
    2 200001 张一
    3 200002 王二

    9)

    SQL> select * from (select rownum rn ,t.* from student t order by name desc)tt w
    here tt.rn between 2 and 3;

    RN ID NAME
    ---------- ------ ----------
    2 200002 王二
    3 200003 李三

    请比较8)和9) 理解7)下的注示。

    好吧,就这么多吧,我想上面举得这些例子,已经将rownum 和 row_number 常见用法,以及各自的特征用法都做了举例。

  • 相关阅读:
    CBUUID UUIDString unrecognized selector sent to instance 错误
    利用php的序列化和反序列化来做简单的数据本地存储
    php 执行外部命令exec() system() passthru()
    php 使用 restler 框架构建 restfull api
    使用ar命令删除iOS静态库重复编译的.o文件
    c++ string 与 char 互转 以及base64
    CLGeocoder Error Domain=kCLErrorDomain Code=2
    mac air/pro 启用三指拖动手势
    osx 10.11.5 El Capitan U盘制作安装
    php cli模式下获取参数的方法
  • 原文地址:https://www.cnblogs.com/preacher/p/3910586.html
Copyright © 2011-2022 走看看