随笔 - 141,  文章 - 0,  评论 - 10,  阅读 - 16万

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

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

  用语句select rownum r,a.* from tablename a order by showorder进行查询的时候会发现结果集中rownum是在排序之前赋的值,因此如果需要按showorder提前的话应该先将tablename按showorder排序,将排序后的结果集按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查询上千行的表时只查处了前十条的时间。

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

posted on   程序员丁先生  阅读(3023)  评论(5编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示