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 常见用法,以及各自的特征用法都做了举例。

  • 相关阅读:
    年度开源盛会 ApacheCon 来临,Apache Pulsar 专场大咖齐聚
    开源流数据公司 StreamNative 正式加入 CNCF,积极推动云原生策略发展
    php摇杆Tiger摇奖
    php调试局部错误强制输出 display_errors
    php文件写入PHP_EOL与FILE_APPEND
    window自动任务实现数据库定时备份
    php 跨服务器ftp移动文件
    linux 关于session缓存丢失,自己掉坑里面了
    mysql 定时任务
    mysql 查询去重 distinct
  • 原文地址:https://www.cnblogs.com/preacher/p/3910586.html
Copyright © 2011-2022 走看看