简单的介绍下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. html入门问题_2016-10-29

    在mac机器上,用Safari打开html文件 1. 如果html里有中文,则在<head><meta http-equiv="Content-Type" con ...

  2. 使用HtmlAgilityPack解析Html(非常好用)

    /// <summary> /// 设计成一个exe,解决WebBrowser控件内存泄漏的问题. /// </summary> public partial class Ma ...

  3. arrayLiist的四种遍历方法

    package com.test; import java.util.ArrayList;import java.util.Iterator;import java.util.List; public ...

  4. Invalidate,Update与Refresh的区别

    在做Windows Forms开发的时候,免不了需要手动刷新窗口,以重绘所需更改的控件,或其它什么的.当出现这类需求时,你有三个选择,使用Invalidate,Update或者Refresh方法. I ...

  5. Xamarin.Android之UI Test简单入门

    一.前言 相信Xamarin免费之后会有更多的人加入进来,这也是我一直以来最希望看到的事,更多的人加入到这个社区中,为这个社区贡献自己的一份力量,国内当前还没有一个比较正规或者说是名气比较大的Xama ...

  6. ORM查询语言(OQL)简介--高级篇(续):庐山真貌

    相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询语言(OQL)简介--高级篇(续):庐山 ...

  7. Intellij笔记

    环境 官网: http://www.jetbrains.com/idea/download/ 需要Java的JDK,需要安装 JDK,而不是 JRE! http://www.oracle.com/te ...

  8. 《kali linux 渗透测试初级教程》免费下载

    Kali Linux系列教程是在51cto上售卖的入门教程,售价100元.每天都有很多网友找我要全部教程,也有人偷偷的录制了教程.索性公开出来,如果您觉得还可以的话,希望可以选择发个小红包或者转发 获 ...

  9. 补充 作业八:团队项目——Alpha阶段项目总结 补充

    游戏界面: 单一.无背景图片 加入了背景 游戏结束: 无变化 无变化 游戏记录 无 加入数据库:有数据记录! 游戏初始化: 无 加入多种模式 此次任务后的总结: 经过上一次的答辩,以及认真观看了其他组 ...

  10. TCP Server—Linux

    #include <stdio.h> #include <netinet/ip.h> #define BUFF_SIZE 1024 int main(int argc,char ...