ORDER BY와 ROWNUM을 같은 위치에 두지 말자

-> 의도하지 않은 데이터가 나올 수 있음

SQL 실행 순서

1. FROM, WHERE 절을 처리
2. ROWNUM 의 순번이 할당되고, 추출 로우에 ROWNUM 을 증가
3. SELECT COLUMN LIST 절을 적용
4. GROUP BY 절을 적용
5. HAVING 절을 적용
6. ORDER BY 절을 적용



-- 테이블 생성
drop table t1;

create table t1 as
select level c1
from   dual
connect by level <= 10
;


-- 정렬 후 5개의 데이터만 조회
select *
from  (select c1
            , rownum as rnum
       from   t1
       order by c1 desc
       )
where  rownum <= 5
;

        C1       RNUM
---------- ----------
        10         10
         9          9
         8          8
         7          7
         6          6

-- 5개의 데이터를 가져온 후 정렬

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 의 위치에 따라 결과값이 달라질 수 있으므로 의도한 결과가 나오게 잘 사용해야 됨.