只需在order by 的字段上加主键或索引即可让oracle先按该字段排序,然后再用rownum标号
2013-10-31 22:57
459 查看
SQL> select rownum,t1. * from t1 where rownum >0 order by name desc;
ROWNUM ID NAME
---------- ---------- --------------------
2 2 yourlove
7 6 xifenfei
5 8 ting
6 7 really
4 4 game
8 5 feng
3 3 eygle
1 1 about
已选择8行。
SQL> alter table t1 add constraint pkKey primary key(name);
表已更改。
SQL> select rownum,t1. * from t1 where rownum >0 order by name desc;
ROWNUM ID NAME
---------- ---------- --------------------
1 2 yourlove
2 6 xifenfei
3 8 ting
4 7 really
5 4 game
6 5 feng
7 3 eygle
8 1 about
已选择8行。
SQL> select rownum,t1. * from t1 where rownum <3 order by name desc;
ROWNUM ID NAME
---------- ---------- --------------------
1 2 yourlove
2 6 xifenfei
SQL> select rownum,t1. * from t1 where id>2 and rownum <3 order by name desc;
ROWNUM ID NAME
---------- ---------- --------------------
1 6 xifenfei
2 8 ting
SQL> select rownum,t1. * from t1 where id>2 and rownum > 1 and rownum <3 order
by name desc;
未选定行
SQL>
注释:
rownum和order by哪个先执行,由优化器决定的。优化器根据具体情况决定他们俩的执行顺序:
一般先前者再后者。在order by 的字段上加主键或索引即可让oracle先按该字段排序,然后再rownum。
还有,有rownum的限制条件(如where子句里有rownum>2)在如where子句里,虽然where子句要早于rownum执行(rownum和order by都要晚于select子句执行,而select子句又晚于where子句执行),但是在where子句里面的rownum限制条件还是没有随着where子句执行而执行。
另见:《rownum的特点以及它与order by 子句的执行顺序关系》
ROWNUM ID NAME
---------- ---------- --------------------
2 2 yourlove
7 6 xifenfei
5 8 ting
6 7 really
4 4 game
8 5 feng
3 3 eygle
1 1 about
已选择8行。
SQL> alter table t1 add constraint pkKey primary key(name);
表已更改。
SQL> select rownum,t1. * from t1 where rownum >0 order by name desc;
ROWNUM ID NAME
---------- ---------- --------------------
1 2 yourlove
2 6 xifenfei
3 8 ting
4 7 really
5 4 game
6 5 feng
7 3 eygle
8 1 about
已选择8行。
SQL> select rownum,t1. * from t1 where rownum <3 order by name desc;
ROWNUM ID NAME
---------- ---------- --------------------
1 2 yourlove
2 6 xifenfei
SQL> select rownum,t1. * from t1 where id>2 and rownum <3 order by name desc;
ROWNUM ID NAME
---------- ---------- --------------------
1 6 xifenfei
2 8 ting
SQL> select rownum,t1. * from t1 where id>2 and rownum > 1 and rownum <3 order
by name desc;
未选定行
SQL>
注释:
rownum和order by哪个先执行,由优化器决定的。优化器根据具体情况决定他们俩的执行顺序:
一般先前者再后者。在order by 的字段上加主键或索引即可让oracle先按该字段排序,然后再rownum。
还有,有rownum的限制条件(如where子句里有rownum>2)在如where子句里,虽然where子句要早于rownum执行(rownum和order by都要晚于select子句执行,而select子句又晚于where子句执行),但是在where子句里面的rownum限制条件还是没有随着where子句执行而执行。
另见:《rownum的特点以及它与order by 子句的执行顺序关系》
相关文章推荐
- oracle查看字符集SQL
- Oracle逻辑结构
- Oracle中的 imp 和 exp
- 创建多个Oracle数据库及相应的实例
- oracle 游标实现多重循环
- oracle存储过程
- Oracle 中 replace
- Windows_oracle10g_2013_10_31_管理用户的对象
- C#连接oracle数据库
- oracle:ora-12560 tns 协议适配器错误
- Oracle Agile PLM Web Services 的实现
- oracle11.2.0.3.0 - 64bit,数据泵导入报ORA-06502,解决
- ORACLE_EBS(PM)项目应用 标准报表开发
- Oracle技术支持是如何分析数据库性能问题的
- [置顶] All about control file in Oracle Database
- oracle在linux配置信息
- oracle在linux配置信息
- oracle 10g 获得dump文件的名称和位置
- oracle/存储过程笔记
- 基于CBO的执行计划简介