如果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