ROWNUM조건이 SQL 구성요소들과 같이 사용될 때 수행되는 순서


 
1. FROM, WHERE 절
2. ROWNUM 조건 
3. SELECT COLUMN LIST절
4. GROUP BY
5. HAVING
6. ORDER BY

=> Order by 절이 rownum 조건과 동일한 위치에 있다면, rownum 조건을 먼저 처리 한 후 order by가 수행된다.

 
 

CREATE TABLE T1
AS
SELECT rownum c1 
FROM DUAL
CONNECT BY LEVEL <= 10000 ;


--SQL[1]
SELECT *
  FROM ( SELECT c1, rownum as rnum 
           FROM T1
         ORDER BY C1 desc
        )
WHERE ROWNUM <= 5;

--결과 
        C1       RNUM
---------- ----------
     10000      10000
      9999       9999
      9998       9998
      9997       9997
      9996       9996

 => 전제 데이터로 order by 를 수행 후 rownum을 처리한 결과

--SQL[2]
SELECT c1, rownum as rnum 
  FROM T1
 WHERE ROWNUM <= 5
ORDER BY C1 desc;

--결과
        C1       RNUM
---------- ----------
         5          5
         4          4
         3          3
         2          2
         1          1

 
=> rownum의 사용위치에 따라, 전혀 다른 값이 추출되는 것을 확인 할 수 있다.