정렬이던 필터링이던 자바 코드 등을 사용하는 것이 아닌, DB에서 하는 것이 가장 빠름 -> 데이터가 한 곳에 있기 때문
인터넷에 잘못된 정보가 많기 때문에 주의!!
- 시작값 : (페이지번호-1) * 페이지 당 개수+1
- 끝 값 : 페이지번호 * 페이지 당 개수
시작값은 해당 페이지에서 보여질 첫 번째 항목의 인덱스를 나타내며, 페이지 번호를 이용하여 시작값을 계산. 페이지 번호가 1부터 시작하기 때문에 1을 빼고, 페이지 당 항목 수를 곱하여 이전 페이지에서 보여진 항목 수 고려. 이후 1을 더하여 항목 인덱스가 0이 아닌 1부터 시작하도록 보정
끝 값은 해당 페이지에서 보여질 마지막 항목의 인덱스를 나타내며, 페이지 번호와 페이지 당 항목 수를 곱하여 계산. 페이지 번호가 1부터 시작하기 때문에 그대로 사용하며, 페이지 당 항목 수를 곱하여 페이지에서 보여질 총 항목 수를 고려
SELECT ROWNUM, STUDNO, NAME
FROM STUDENT
ORDER BY STUDNO;
-> ROWNUM이 배정된 후 ORDER BY가 실행되기 때문에 ROWNUM의 순서가 뒤죽박죽임
SELECT ROWNUM, A.*
FROM(
SELECT STUDNO, NAME
FROM STUDENT
ORDER BY STUDNO
) A;
-> 정렬 후 ROWNUM을 배정하면 됨
SELECT ROWNUM, A.*
FROM(
SELECT STUDNO, NAME
FROM STUDENT
ORDER BY STUDNO
) A
WHERE ROWNUM BETWEEN 1 AND 10;
-> 이 경우 ROWNUM에 별칭을 주면 로직이 제대로 실행되지 않음
SELECT * FROM(
SELECT ROWNUM RNUM, A.*
FROM(
SELECT STUDNO, NAME
FROM STUDENT
ORDER BY STUDNO
) A
) B
WHERE B.RNUM BETWEEN 11 AND 20;
-> 이렇게 한 번 더 감싸주면 별칭을 사용할 수 있음