페이징 기법이란
데이터가 100건이 있다고 가정한다면, 한페이지당 10개씩 보여줄수 있게하는 기법을 말합니다.
1페이지에는 0~10까지. 2페이지에는 11~20 까지.. 10페이지에는 91~100 까지의 레코드를 보여주는 것을 말합니다.
아래는 페이징 기법을 구현할 수 있는 쿼리문입니다.
오라클에서 paging을 처리하기 위해서는 오라클에서 제공되는 rownum을 사용하게 됩니다.
하지만 rownum을 잘못알고 사용을 하게 되면 저처럼 삽질을 계속 하게 된다는 ^^;;
예를들면...
SELECT *
FROM (
select board_seq, board_name, insert_date
from t_board
order by insert_date desc
)
WHERE ROWNUM >= 1 AND ROWNUM <= 10
이렇게 쿼리문을 날리면 데이터가 나옵니다.
하지만 ..
SELECT *
FROM (
select board_seq, board_name, insert_date
from t_board
order by insert_date desc
)
WHERE ROWNUM >= 11 AND ROWNUM <= 20
이렇게 쿼리문을 날렸을때 그냥 보기에는 나올것 같습니다. 하지만 아무런 데이터가
나오지를 않습니다.^^; 아주 황당합니다.
그래서 많이쓰는 방법으로... 첫번째..
SELECT *
FROM (
select rownum as rnum, board_seq, board_name, insert_date
from t_board
order by insert_date desc
)
WHERE rnum>= 11 AND rnum <= 20
서브쿼리에서 rownum을 구해 동일한 방법으로 where 조건을 주면 아주 잘 나옵니다.
또다른 방법.. 두번째..
row_number() over(정렬을 위한 order by) 를 사용하면 됩니다.
SELECT *
FROM (
select row_number() over(order by insert_date desc) as rnum, board_seq,
board_name, insert_date
from t_board
)
WHERE rnum>= 11 AND rnum <= 20
첫번째 방법과 두번째 방법을 했을경우 결과는 동일합니다.
차이점이 있다면 두번째 방법에서 row_nuber() over()를 이용해서 over()안에 있는
order by 순으로 rownum을 새롭게 구하는것입니다.
* 참고 : row_number()는 오라클 8.1.6.0.0 이상에서 사용이 가능합니다.
댓글 없음:
댓글 쓰기