rownum与order by 子句的执行顺序关系

来源:互联网 发布:大财富软件 编辑:程序博客网 时间:2024/04/28 13:15

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

当然,如果我们需要排除因为排序字段主键与否对执行顺序的影响,不用在order by子句里的字段设置主键约束或是设置索引的方式,使结果集排序后再重新对结果集的rownum值进行编号,那还可以使用嵌套查询的方式
Sql代码查询如下:

SELECT *   FROM(   SELECT ROWNUM RN,TA.*   FROM(  select  ID, YYB, XM, MC from user_info  order by XM ;)TA WHERE ROWNUM <=  20  )WHERE RN > 10 
0 0