오라클 페이징 쿼리(Oracle paging query)
총 12개의 데이터를 가지고 있느 테이블이 있다고 가정합니다.
listnumber = 5 // 한 페이지 당 보여주는 게시물의 수
page_no = 1 // 페이지 번호
select *
from (select A.*,FLOOR((ROWNUM - 1)/listnumber + 1) page, rownum
from (
select board_title from board order by board_no desc
) A
)
where page = page_no;
우선 FLOOR함수는 값의 내림값을 표현해주는 함수입니다.
SQL> select FLOOR(7.4) from dual;
SQL> 7
ROWNUM은 테이블이 가지고 있는 행의 번호를 순서대로 반환해줍니다.
SQL> select rownum from 테이블명; //3개의 데이터를 가지고 있는 테이블이라 가정
SQL> ROWNUM
SQL> --------
SQL> 1
SQL> 2
SQL> 3
결국 총 데이터가 12개이면 rowum 은 1부터 12까지가 되죠.
FLOOR((ROWNUM - 1)/listnumber + 1) page
그리하여 rownum은 1부터 12까지 대입을 하게되고 수식에 의해서 page 는 3의 값을 가지게되고
값 페이지값에 해당되는 rownum 값을 알게 되겠죠.
page rownum
------- -----------
1 1
1 2
1 3
1 4
1 5
2 6
2 7
2 8
2 9
2 10
3 11
3 12
그럼
where page = page_no;
page 에 jsp또는 서블릿에서 넘어오는 페이지 번호를 대입하면 페이지별 데이터를 가져오게 됩니다.