简单的介绍下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. C#内存释放

    看微软件的宣传说NET会自动回收内存.以前一直以为NET会自动回收也没有去细看. 近来发现NET下的winForm程序,默认情况下不会自动释放内存.如果是循执行的程序内存会不断增大.具体会大到多少没有 ...

  2. proxyd.c

    /**************************************************************************** * program: proxyd * mo ...

  3. hdu 5104 素数打表水题

    http://acm.hdu.edu.cn/showproblem.php?pid=5104 找元组数量,满足p1<=p2<=p3且p1+p2+p3=n且都是素数 不用素数打表都能过,数据 ...

  4. WideCharToMultiByte和MultiByteToWideChar函数的用法

    为了支持Unicode编码,需要多字节与宽字节之间的相互转换.这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读<Windows核心编程>,总结出正确的用法. ...

  5. Android中的requestWindowFeature

    朋友推荐使用博客记录工作中的难点以及常犯的错误,仅作为笔记,首先整理之前的工作日志. requestWindowFeature(featrueId),它的功能是启用窗体的扩展特性: 注意:该方法必须放 ...

  6. hdu 4982 Goffi and Squary Partition

    Goffi and Squary Partition Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Subm ...

  7. mysql 性能配置优化

    修改mysql配置文件 my.cnf ,内容如下: [mysqld]datadir=/data/mysql/datasocket=/var/lib/mysql/mysql.sockuser=mysql ...

  8. Online Judge中基本的输入输出

    一.利用c语言处理输入和输出 1.输入: 在C语言中输入中stdin指针表示标准的输入,scanf默认读取的就是stdin指向的输入,在acm中我们可能需要不断的测试,最好将stdin重定向到某一个文 ...

  9. PDF2

    itex生成PDF文档示例 package dao.other; import java.awt.Color; import java.io.File; import java.io.FileInpu ...

  10. 苹果全新 Mac OS X 系统开放下载

    在今天的发布会上,苹果除了发布多款硬件产品之外,还更新了Mac OS X Mavericks(小牛)系统,作为重大改变,这一Mac系统将从今天起开始免费升级. 升级后的Mavericks系统将进一步与 ...