简单的介绍下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('','张一');
insert into student values('','王二');
insert into student values('','李三');
insert into student values('','赵四');
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 常见用法,以及各自的特征用法都做了举例。

oracle 中 rownum 和 row_number()的更多相关文章

  1. ORACLE 中rownum和row_number()的使用区别(可指定取sql结果集的第几个数据)

    这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下.   row_number()over(partition by ...

  2. oracle中rownum和row_number()

    row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内 ...

  3. ORACLE 中ROWNUM用法总结(转)

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  4. oracle中rownum和rowid的区别

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  5. ORACLE 中ROWNUM用法总结!

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  6. Oracle中rownum的基本用法

    Oracle中rownum的基本用法 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且r ...

  7. ORACLE 中ROWNUM

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  8. Oracle中rownum和rowid的理解

    rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每行的rounum不是固定的.而rowid是“物理”编号.若数据库文件没有移动,则每行的 rowid一般是固定 ...

  9. oracle中rownum和rowid的区别【转】

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

随机推荐

  1. mac OS X 配置Python+Web.py+MySQLdb环境

    MAC默认支持Python 2.7所以不用安装. 1.安装pip sudo easy_install pip 2.安装Web.py sudo pip install Web.py 3.安装MySQLd ...

  2. 我与solr(一)--solr的配置与安装

    感谢upxiaofeng的分享,转载自http://blog.csdn.net/zoubf/article/details/51505940 准备工作: 目前最新版本6.0.下载solr 6.0:So ...

  3. matlab资源

    百度网盘  链接:http://pan.baidu.com/s/1c06ikEW 密码:9dpt包含matlab6.5,7,7.01,7.04,7.1,Matlab2006b(7.3),Matlab  ...

  4. 测试文档锁:doc.LockDocument()

    /// <summary> /// 总结:用到DocumentManager.Open(filePath)时,如果是ForWrite,就需要用到lock文档锁. /// </summ ...

  5. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...

  6. 一步一步安装hive

    安装hive 1.下载hive-0.11.0.tar.gz,解压; 2.下载mysql-connector-java-5.1.29-bin.jar并放到hive/lib/下: 3.配置hive/con ...

  7. strncpy和memcpy的区别

    今天不小心在该用memcpy的时候,用了strncpy使自己吃了亏,所以写出这个博文. memcpy就是纯字节拷贝,而strncpy就不同了,字符串是以'\0'结尾的.如果一个字符buffer长度为6 ...

  8. 第56讲:Scala中Self Types实战详解

    今天学习了self type的内容,让我们来看下代码 package scala.learn class Self{  self =>    val tmp = "Scala" ...

  9. [XAF] Keep the DetailView open in a popup window

    public class ViewController1 : ViewController { ListViewProcessCurrentObjectController controller; p ...

  10. JavaScript 基础第八天(DOM第二天)

    一.引言 初步认识DOM有可能会被各种不熟悉的因为因素影响自己的学习心态,你需要的是多去记忆一些单词然后加强自己的代码量. 二.导入 在昨天初步认识DOM以后我们见天将接着介绍有关于DOM的内容. 三 ...