1. 程式人生 > >rownum與order by 子句的執行順序關係

rownum與order by 子句的執行順序關係

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