ROW_NUMBER() 를 이용하여 간단한 페이징 쿼리를 만들어 보자!

ROW_NUMBER() 를 SQL2005 설명을 빌리자면
 
* 결과 집합 파티션 내의 행 일련 번호를 반환합니다.

이렇게 설명할 수 있다.

자 ROW_NUMBER() 를 간단히 실행해 보자..
 SELECT  ROW_NUMER() OVER ( ORDER BY IDX DESC ) As rownum FROM  TABLE1
 위 SQL 구문은 TABLE1에서  IDX 를 역순으로 일렬번호를 리턴한다.

 rownum
 1
 2
 3
 4
 ..
 ..


이렇게 일렬번호를 리턴한다.

자~ 이제 row_number()의 기능을 알았으면.. 간단한 페이지 쿼리를 만들어 보자..
설명은 그 다음에..




 declare @page int
 declare @pageSize int
 set @pageSize = 10
 set @page = 1


 select top 10   t1.*  from (
   select  top (@pageSize * @page) row_number() over(order by b.idx desc) as rownum, *  from tb_table  a 
 ) as t1
 where rownum > (@page-1) * @pageSize



위 쿼리는 tb_table 의 idx 가 역순으로 정렬된 상태에서 첫번째 페이지 10개의 레코드를 보여준다.
두번째 페이지를 보고 싶다면..
  rownum 이 11 부터 10개가 보이면 되니까 ..  조건문
  where rownum > 10 이 되면 두번째 페이지가 보여진다.

간단하다.. 페이징쿼리가..

난 row_number()라는게 있다는 것을 이번 기회에 처음 주워들었다^^
왜 이제야 알았지..

아~ 근데 MS_SQL 2005 이상만 지원한다.

요즘 날로 바쁘다보니.. 힘들어 죽갔다..
다음에 실무에 써봐야겠다 ㅋㅋ.

머 성능이 어쩌구 저쩌구하면.. 쓰던거 쓰지 머..
성능을 잘 모르겠다.. 뒷 페이지로 갈수록 좀 더 많은  rownum 을 가져올테니 성능은 뒤로 갈수록 떨어지겠지..

암튼.. 이런게 있다.
..

신고

+ Recent posts