컴퓨터 공부/Database

[Database] ROWNUM이란

나정_ 2013. 5. 29. 17:28

ROWNUM에 대해 알아보자!!



1. ROWNUM 정의


ROWNUM이란

오라클에서 ROWNUM은 쿼리집합이 메모리에 생성된 뒤 결과 집합 내의 레코드에 붙여지는 가상의 순번을 의미한다. ROWNUM에는 숫자 1,2,3,4,...N의 값이 할당되며 여기서 N의 값은 ROWNUM과 사용하는 로우의 수를 의미한다.

 

ROWNUM은 주로 2가지 목적으로 많이 사용된다.

 

Top-N 프로세싱 : TOP에서 N건 처리

페이지네이션(Pagination) : LIMIT 구분과 유사하며, 페이징을 처리할 때 사용


 2. ROWNUM 동작원리 


ROWNUM 값은 쿼리의 조건 절이 처리되고 난 후 , 그리고 sort가 수행되지 전에 할당된다. 또한 ROWNUM은 할당된 이후에 증가만 된다.

 

예시

SELECT ROWNUM

FROM tb_user_m WHERE user_seq = ‘1’

GROUP BY user_name

ORDER BY ROWNUM DESC

 

처리순서

1) FROM/WHERE 절 처리

2) ROWNUM이 할당되고 FROM/WHERE절에 전달되는 출력 레코드에 대하여 ROWNUM이 증가

3) SELECT 적용

4) GROUP BY 적용

5) ORDER BY 적용

 

 * 추가적으로 알게 된 정보 : order by 를 통하여 정렬시에 index를 타는 컬럼을 설정했었을 시에는 where 절 후 바로 rownum이 할당 되는 것이 아니라  order by 이후 할당된다고 한다.. 신기방기  


3. ROWNUM 사용방법



3-1) Top-N 프로세싱

ROWNUM을 통하여 TOP에서 N건 까지 처리하는 방식으로 아래와 같이 사용한다.


SELECT * FROM USERTEST WHERE ROWNUM <= 10

 

3-2) 페이지네이션

MYSQL에서 LIMIT로 페이징 처리할 사용되며 아래와 같이 사용한다.


SELECT *

FROM

(SELECT ROWNUM AS ROWSEQ,

user_seq,

user_name,

user_position

FROM

(SELECT USER_SEQ,

USER_NAME,

USER_POSITION

FROM USERTEST

ORDER BY user_name desc

)

ORDER BY ROWSEQ asc

)

WHERE ROWSEQ BETWEEN 0 AND 10