※ ROWNUM 이 있는절에는 WHERE절과, ORDER BY 절이 붙으면 안된다.
1. WHERE 절/ ORDER BY 절이 없는 경우
1-1. 잘못된 사용 예
SELECT ROWNUM, num, name, subject, TO_CHAR(created, 'YYYY-MM-DD') created, hitCount
FROM bbs ORDER BY num DESC;
==> 위 그림처럼, ROWNUM의 값이 NUM과 같은 순서대로 나온다. 활용불가!
1-2. 올바른 사용 예
SELECT ROWNUM rnum, data.*
FROM (SELECT ROWNUM, num, name, subject, TO_CHAR(created, 'YYYY-MM-DD') created, hitCount
FROM bbs ORDER BY num DESC) data;
==> 위 그림처럼, ROWNUM의 값이 NUM과 달리 출력 순서대로 나온다. 활용가능!
2. WHERE 절/ ORDER BY 절이 있는 경우
2-1. 잘못된 사용 예
SELECT ROWNUM rnum, data.*
FROM (SELECT num, name, subject, TO_CHAR(created, 'YYYY-MM-DD') created, hitCount
FROM bbs ORDER BY num DESC) data
WHERE ROWNUM >= 4 AND ROWNUM <= 6;
==> 위 그림처럼, 아무런 결과가 나오지 않는다!! 활용불가!
2-2. 올바른 사용 예
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT num, name, subject, TO_CHAR(created, 'YYYY-MM-DD') created, hitCount
FROM bbs ORDER BY num DESC) data)
WHERE rnum >= 4 AND rnum <= 6;
==> 위 그림처럼, 원하는 결과를 정상적으로 얻을수 있다. 활용가능!
출처 http://egloos.zum.com/it79/v/105358