SQL中rownum和order by的执行顺序的问题

在一个SQL中,如果同时使用rownumorder by,会有一个先后顺序的问题。

比如select id1,id2 from t_tablename where rownum<3 order by c_date desc ,这个语句会先从结果集中取前三条记录,再对这3天记录按日期排序。如果设计者向先对日期排序,再取前三天记录,那么就不会得到正确的结果。

所以rownumorder by一起使用的时候一定要注意的执行顺序的问题。

这句可以这样实现

select id1,id2 from (select id1,id2 from t_tablename order by c_date desc) where rownum<3

rownum先排序后分页

今天突然想到rownum可以解决分页问题,于是做了各种实验,找个几个文章,最后有了一定成果。

现有表tablename,含有字段showorder,要求提取showorder的第11行到20行数据。

用语句select rownum r,a.* from tablename a order by showorder进行查询的时候会发现结果集中rownum是在排序之前赋的值,因此如果需要按showorder提前的话应该先将tablenameshoworder排序,将排序后的结果集按rownum提取。

语句

SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20 

可以查出前20条,但如果过滤条件变成rownum<=20 and rownum >=10,就会发现结果集一条数据都没有,因为rownum是提取数据,将数据操作完成之后再进行标记行号,关于这点,有个作者写的很好http://blog.csdn.net/greenappple/article/details/6872660,大家可以看看。

剩下的操作是将标记好行号的前20条数据提取后十条。

SELECT *  FROM (SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20 )  WHERE r >= 11;

上面的语句用plsql执行时用了0.078秒,等同于plsql查询上千行的表时只查处了前十条的时间。

网上有很多好文章写着块的,此处只记载了适用于我的方面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值