您的位置:首页 > 数据库 > Oracle

oracle分页查询

2011-08-26 17:08 204 查看
有三种方式:

1、ROW_ID

2、ROWNUM

3、分析函数

效率从高到低:1>2>3,第三种方式最差

这里讲一下ROWNUM方式,拿oracle自带的emp表示例。

要求:取出第5-10条的emp表数据

1、先查询出所有的emp记录

select * from emp

2、将查询结果作为一个子表,作为子表的目的是并将rownum引入到“新表a1”中

select a1.* ,rownum rn from (select * from emp )a1

此时a1表中会有从1-count(1)的rn列,但是由于oracle的rownum比较特殊,不支持连续两次使用.

(两次使用的意思是:假如在where语句后边加上rownum>=5 ,那么这算第一次使用了rownum ,如果此时再使用rownum<=10的话,这就是第二次使用了)所以不支持这种写法。

所以使用select a1.* ,rownum rn from (select * from emp )a1 where rownum>=5 and rownum<=10取不到第5-10条的emp表数据,结果是没有记录。

3、因此如果要取第5-10条的emp表数据,要分成两个步骤,第一次使用rownum取出<=10的数据(即1-10的数据),这时候将这些结果再次作为子表a2,然后在a2,中再取第5-10的数据。SQL语句如下:

select a2.* from (select a1.* ,rownum rn from (select * from emp )a1 where rownum <=10) a2 where rn>=5

如果要取emp表的第3-8条数据

只需要修改以上SQL中红字的数字,如下:

select a2.* from (select a1.* ,rownum rn from (select * from emp )a1 where rownum <=8) a2 where rn>=3

备注:如果要修改输出的选择列、或者排序等等的话,只需要在最里层查询语句中(红色部分)修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: