您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > 数据库技术 > Oracle

Oracle数据库rownum的原理和使用详解

作者:itmyhome  来源:互联网  日期:2015-01-08 9:56:45
收藏  评论:( 0 )  阅读:395

对于查询返回的每一行,使用rownum伪列返回一个数字,表示oracle从表中选择行或将加入行的顺序。

选择的第一行rownum为1,第二行为2,以此类推。

这里我们首先创建一张测试表test,并插入一些数据:

create table test(
    name varchar2(100),
    address varchar2(100),
    birthday date
);
insert into test values('name1','address1',to_date('1990-04-10','yyyy-MM-dd'));
insert into test values('name2','address2',to_date('1989-06-11','yyyy-MM-dd'));
insert into test values('name3','address3',to_date('1991-08-23','yyyy-MM-dd'));
insert into test values('name4','address4',to_date('1998-12-04','yyyy-MM-dd'));
insert into test values('name5','address5',to_date('1985-07-16','yyyy-MM-dd'));
insert into test values('name6','address6',to_date('1988-04-08','yyyy-MM-dd'));
insert into test values('name7','address7',to_date('1992-08-26','yyyy-MM-dd'));
insert into test values('name8','address8',to_date('1995-11-10','yyyy-MM-dd'));
insert into test values('name9','address9',to_date('1988-03-28','yyyy-MM-dd'));
insert into test values('name10','address10',to_date('1982-05-02','yyyy-MM-dd'));
insert into test values('name11','address11',to_date('1991-10-19','yyyy-MM-dd'));


可以使用rownum来限制由查询返回的行数,如下例子:

select * from test where rownum < 10;


如果一个order by子句和rownum在同一个查询,那么行会由order by子句中重新排序,看如下例子

select rownum, name, address, birthday
  from test
 where rownum < 5
 order by birthday;

我们发现rownum并不是顺序的,系统是按照记录插入的时候给记录排的号,解决这个问题 需要使用子查询

select rownum, name, address, birthday
  from (select name, address, birthday from test order by birthday)
 where rownum < 5

这样就成了按birthday排序,并且用rownum标出正确序号(由小到大)


前面我们使用rownum<10查询出来了9条数据,这次我们使用rownum>1来查询一下数据

select * from test where rownum > 1;


发现该查询无返回任何数据,所以我们无法使用rownum = n 或 rownum > n(n>1的自然数)来进行查询

原因是:

第一行读取被分配为1,rownum>1使得条件为假,接着读取第二行现在变为第一行,并还分配为1

rownum使得条件依然是假,所有行随后均未能满足该条件,所以没有行被返回。

如果非要rownum大于一个正整数来查询,还得需要子查询来实现

select num, name, address, birthday
  from (select rownum as num, name, address, birthday from test)
 where num > 5;


也可以使用between...and...

select num, name, address, birthday
  from (select rownum as num, name, address, birthday from test)
 where num between 5 and 10


原文地址:http://blog.csdn.net/itmyhome1990/article/details/42492395



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/oracle/1082.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论