반응형
안녕하세요.
이번 포스팅에서는 게시판 같은 곳의 페이징 처리 시 자주 사용되는 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이 잘 매겨져있다.
반응형
'DB > Oracle' 카테고리의 다른 글
[Oracle] oracle 설치 없이 연습할 수 있는 사이트 (0) | 2021.05.28 |
---|---|
[Oracle] group by, having 사용 방법 (0) | 2021.05.25 |
[SQL] prepareStatement 주의점 (0) | 2021.04.14 |
[Oracle] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 (0) | 2021.03.03 |
[iBatis, myBatis] 변수 사용 시, ##과 $$ 차이점 (0) | 2021.02.15 |