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