【TOM旧博客内容转移】Oracle分页

来TOM上的blog挂掉了,现在准备看能找到多少。。。准备把技术相关的全部转到JAVAEYE上边来。。。恨死TOM了。。

 

 

原发表日期:2008-04-10 

 

 

 

 

Oracle分页

 

 

我实在是不知道在一般情况下Oracle是怎么分页的。我觉得大概都是用ROWNUM吧。。。。。。

前些天的数据库笔试(尤其是东软的),我觉得真的的是很难啊。。。。很多的东西都不知道。。。有的学的时候也只是稍微提了一下。。。。。。还是差得很远啊。。。。

我是不知道在实际工作中到底经常用不用这些东西。。。不过说句实话。。。我没有在太大的公司呆过。。。他们一般写东西都使用Hibernate、Ibatis之类的还用。。。尤其是Hibernate,一般的分页查询他都是写好的。

在用Hibernate的时候显示出来的用于分页的句子:

SELECT t.ROWNUM, t* FROM(
        SELECT t.ROWNUM, t.* FROM TABLE_NAME t
        WHERE t.ROWNUM<341
)WHERE t.ROWNUM>335;

ROWNUM是ORACLE的一个“伪列”,顾名思义,就是说其实在一列是不存在于实际的表中的。。。。。。。在一列是在查询之后才给每一结果加上去的。。。也就是说。。。你要是直接查“SELECT t.ROWNUM, t.* FROM TABLE_NAME t WHERE t.ROWNUM>15”这句话是没有任何的意义的。。。。ROWNUM是在结果查出来以后赋值上去的。。。要是这样子写的话永远也没有结果的。。。。。不过要是查ROWNUM=1的话是有一个结果的。。。。。比1大的自然数就不行了。。。

但是如果遇到要按照某一列进行排序的话。。。好像就比较麻烦了。。。。。

我知道的情况是这样子的:
(假设表里有ID字段按照ID排序查出第115条到145条的的记录)

SELECT t.ROWNUM, t* FROM(
        SELECT t.ROWNUM, t.* FROM(
              SELECT t.* FROM TABLE_NAME t ORDER BY t.ID DESC
        )
        WHERE t.ROWNUM<341
)WHERE t.ROWNUM>335;


好想看起来很繁琐。。。不过我也不清楚其他的方法了。。。。。。。

好像也可以用WHERE t.ROWNUM BETWEEN 335 AND 341,不过我认为速度上可能还是要比上边的慢。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值