Chinaunix首页 | 论坛 | 博客
  • 博客访问: 404197
  • 博文数量: 85
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 916
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-03 20:35
文章分类
文章存档

2014年(5)

2012年(2)

2010年(3)

2009年(67)

2008年(8)

分类: Oracle

2009-07-23 17:11:50

oracle是依靠rownum这个属性来分页的!

1. 标准的rownum分页查询使用方法:
select *
from (select c.*, rownum rn from content c)
where rn >= 1 and rn <= 5

2. 排序的分页

select *
from (select rownum rn, t.*
from (select title, addtime from content order by addtime desc/asc) t)
where rn >= 1 and rn <= 5

总结:

rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2

,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。

举例:

例如表:student(学生)表,表结构为:
ID    char(6)      --学号
name   VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values(''200001'',‘张一’);
insert into sale values(''200002'',‘王二’);
insert into sale values(''200003'',‘李三’);
insert into sale values(''200004'',‘赵四’);
commit;
1.等值查询
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生

的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判

断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
select rownum,id,name from student where rownum=1;
2.大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从

1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立(不能对rownum用">")。可以

使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因

为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
select * from(select rownum no ,id,name from student) where no>2;
3.小于某值的查询条件
select rownum,id,name from student where rownum <3 (取出前两条数据)
这下就可以解决取出第二条数据的SQl了
select * from (select rownum no,id,name from student where rownum<3 ) where no >=2;
4.rownum和排序
select rownum ,id,name from (select * from student order by name);

阅读(1300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~