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이 잘 매겨져있다.
반응형