DB/Oracle

[Oracle] ORDER BY 및 ROWNUM 사용 시 유의점

멍목 2021. 4. 20. 21:02
반응형

안녕하세요.

 

이번 포스팅에서는 게시판 같은 곳의 페이징 처리 시 자주 사용되는 ROWNUM 과 데이터의 정렬 순서를 지정할 때 사용되는 ORDER BY의 사용 유의점에 대해 알아보려고 합니다.

 

ROWNUM : 조회된 순서대로 순번을 매기는 고유 변수입니다.

ORDER BY : 데이터 정렬 시 사용되는 기능입니다. 

 

유의점은 ORDER BY로 데이터 정렬이 되기 전에, ROWNUM이 매겨진다는 것입니다.

 

아래의 예제 쿼리들을 보며 알아보겠습니다. (아래의 쿼리는 서브쿼리를 이용하기 위해 비효율적으로 짠 쿼리입니다.)

 


1. 예제 테이블 확인

SELECT  * 
FROM    CLIENT;

 

 

2. FIRST_NAME, LAST_NAME 순서로 데이터를 정렬 한 후에, 3개까지만 조회한다.

2-1) ROWNUM(RNUM)과 ORDER BY를 동시에 사용 한 경우

SELECT LAST.* 
FROM    (SELECT  ROWNUM RNUM
             ,  FIRST_NAME
             ,  LAST_NAME
        FROM    CLIENT
        ORDER BY FIRST_NAME, LAST_NAME
        ) LAST
WHERE   LAST.RNUM BETWEEN 1 AND 3;

문제점 : ORDER BY 한 순서는 잘 나왔지만 RNUM이 잘 매겨지지 않았다.

 

 

 

2-2) ORDER BY를 먼저 적용 한 뒤에 바깥 쿼리에 ROWNUM(RNUM)을 이용한 경우

SELECT  LAST.*
FROM    (SELECT ROWNUM RNUM,
                TEMP.*   
        FROM    (SELECT  FIRST_NAME
                      ,  LAST_NAME
                FROM     CLIENT
                ORDER BY FIRST_NAME, LAST_NAME
                ) TEMP
        )LAST
WHERE   RNUM BETWEEN 1 AND 3;

위와 달리 ORDER BY 한 순서와 RNUM이 잘 매겨져있다.

 

 

 

 

 

반응형