rownum 与order by 的执行顺序及按rownum 排序

1547年前oracle数据库3394

  如果select语句(非嵌套查询形式的)有order by子句,则order by子句一般都是最后一步执行的。但是如果order by子句里的字段被设置了主键约束或是被设置索引了,那么order by子句执行之后,oracle系统还会重新对结果集的rownum值进行编号。


AX57P~4741DA]_)}MPP2N5X.png

上图看出,P_WEIGHT是降序并有序的。而rownum是无序的。

下图,加了rownum<=0后,按P_WEIGHT 降序,P_WEIGHT的最高值也没了


图片.png


解决方案:1,将P_WEIGHT设为主键,显然此方法不可能,如果是按主键id排序,就没有此问题了

2.嵌套查询:

select ROWNUM,P_WEIGHT from
(select ROWNUM,D.P_WEIGHT from T_SYS_POI D where D.P_STYLE = '002'  ORDER BY D.P_WEIGHT desc)
where   ROWNUM<=10

  而嵌套查询方法相比之下拥有较高的效率,主要体现在WHERE ROWNUM <= 10这句上

图片.png

相关文章

linux下启动oracle实例

 启动数据库实例,分为两步:第一步,启动监听;第二步,启动数据库实例。 一、如何启动数据库实例  1.进入到sqlplus启动实例[root@localhost...

Oracle sql优化

 一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据...

Oracle常用sql语句

1.多行数据一行显示sql:(用sum函数或max函数,当lc为1时DQSYJRZC的值) sum函数只能查字段类型为number型的,若字段值是汉字则用max函数select nsrsbh , su...

Oracle 错误代码总结及解决方案ora-0

 ORA-00001:违反唯一约束条件(主键错误)ORA-00028:无法连接数据库进程ORA-00900:无效sql语句ORA-00904:字段名写错或是建表时最后一个字段有逗号ORA-0...

如何彻底卸载删除oracle数据库

 windows下如何彻底删除Oracle 软件环境: 1、Windows 2000+ORACLE 8.1.7 ,oracle 10g2、ORACLE安装路径为:C:\ORACLE实现方...

oracel如何找回被删除的数据

---此sql是查询这个时间段前的数据select * from tableName as of timestamp to_timestamp('2011-05-21 11:40:00'...

评论列表

萨瓦迪卡
2017-06-23 15:00:08

赞一个

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。