오라클 페이징 - 조건절 포함

|

오라클에서 페이징하는 보통의 방법으론 쿼리를 2중으로 하여 rownum을 이용한다.

그런데 검색하다보니 대부분의 페이징 방법으로는 조건절을 포함할수가 없었다.


원하는 결과는 "소팅 후 페이징" 이었으나 검색한것의 대부분의것엔 order by가 없었고,

order by를 넣으면 "페이징 후 소팅"의 결과를 내뱉더라.



그래서 쿼리를 한번 더 감싸서

select * from
       (select rownum as rn, t1.* from
               (select a.* from board a order by subject) t1
       )
where rn between 10 and 20

식으로 하면 될듯 하다.


가장 안쪽의 쿼리(1)에서는 특정컬럼으로 정렬된 결과를 가져온다.

그 상위 쿼리(2)에서는 (1)쿼리에서 가져온 결과에 rn이라는 별칭으로 rownum을 부여하고

가장 바깥쪽 쿼리(3)에서 (2)에서 설정된 rownum을 기준으로 페이징을 한다.


일단은 이것저것 해본 방법이고... 더 나은 방법이 있으면 추천바람....

 

 

 

 

 

수정!!

 

찾아보니 ROW_NUMBER() ~ OVER() 가 있더라,

 

ROW_NUMBER() OVER (ORDER BY [COLUMN] DESC)

 

row_number()함수는 각 열에 고유번호를 붙이는 것이고,

over 안의 order by로 정렬....

즉 over안의 조건으로 정렬하여 rownum을 붙이는거랄까,

 

위에 예를 든 쿼리를 이 형식으로 바꿔보자면,

 

SELECT * FROM

(SELECT T.*, ROW_NUMBER() OVER(ORDER BY subject ASC) AS NUM

FROM board T )

WHERE NUM BETWEEN 10 AND 20

 

이렇게 되겠다_

'Knowledge > Database' 카테고리의 다른 글

오라클 내장 함수  (1) 2007.08.20
And