首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > Oracle中的rownum与Order By之间的关系
【标  题】:Oracle中的rownum与Order By之间的关系
【关键字】:Oracle,rownum,Order,By
【来  源】:http://blog.csdn.net/ah__fu/archive/2006/06/22/820397.aspx

Oracle中的rownum与Order By之间的关系

    刚学ORACLE的时候,就先入为主地认为rownum是一种类似于SQLSERVER的TOP关键字一样的机制————起码咱们最常用的分页可以用这个搞定。
    事实并非如此,学习的时候,“空”是很重要的,以前的经验往往是一种坏处。
    SQLSERVER中,如果TOP关键字和ORDER BY关键字一起出现,是先ORDER BY 后再TOP。也就是说:取得最前面的几条记录是经过排序的。
   而ORACLE中,如果使用WHERE rownum<=N和ORDER BY一起出现的话,ROWNUM优先于ORDER BY。也就是说,ORDER BY无法对所有满足条件的记录排序,只能对当前的rownum<=N中的N条记录排序。
   看下面这个分页的查询:
SELECT LimitResult.*
FROM
(
    SELECT *, rownum AS r
    FROM ATable
    WHERE rownum<=40
    ORDER BY createTime DESC
) LimitResult
WHERE LimitResult.r>20
--每页20条,取第二页

   查询的结果中,仅仅只是对当前页的CreateTime进行了倒序排列,并没有按照所有记录的倒序排列。说明rownum的限制优先于ORDER BY。不得已把查询修改成下面的样子:
SELECT LimitResult.*
FROM
(
 SELECT OrderResult.*, rownum AS r
 FROM
 (
        SELECT *
        FROM ATable
        ORDER BY createTime DESC
 ) OrderResult
 WHERE rownum<=40
) LimitResult
WHERE LimitResult.r>20
明显效率没有以前高了,但是没办法。

    以上就是我发现的规律,希望朋友们能提出更好的办法。谢谢!

Oracle 访问数据库字段和表名有大小写区分吗?:【上一篇】
如何在BDS2006中切换到Delphi7浮动工具窗风格:【下一篇】
【相关文章】
  • Oracle 访问数据库字段和表名有大小写区分吗?
  • Oracle高级队列(Advanced Queue)初体验
  • VBScript 实现 UBB 显示代码([code][/code])附加行号, 正则实现 By Stabx
  • Martin上海演讲实录1:Ruby是一个非常好的开发工具
  • Martin上海演讲实录2:现场演示Ruby编程
  • Martin上海演讲实录3:细数Ruby语言优缺点
  • innerHTML和getElementById
  • 不同版本oracle之间的exp/imp
  • 日记 [2006年06月15日] 完成了第一个Oracle群集
  • oracle报错:TNS 超时
  • 【随机文章】
  • CorelDRAW 基础卡通系列
  • 中国人傻B一样地甘愿上政府的四大当
  • 录制一个SW宏
  • TrojanSpy.Banker.s病毒技术报告
  • Firefox推出1.5测试版 导航速度更快更安全
  • eclipse.java 基本操作
  • VTC128/M-VTC128/W系列大型多媒体系统
  • 网络公牛使用
  • 在工作簿中使用Excel工作表
  • windows2000本地登陆过程及利用方法
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.