※ 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