오라클에서 페이징하는 보통의 방법으론 쿼리를 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
이렇게 되겠다_