select rownum rn, column1, column2... from ( //2. 정렬된 데이터들에 번호를 부여 (rownum)
select * from board order by ref desc, re_step asc) //1. 전체 데이터를 정렬
)
where rn between ? and ?
3. rownum은 실제 테이블에 없는 컬럼이기 때문에 아래 잘못사용한 예 처럼 사용해 버리면 오류가 발생한다
(where는 테이블에 대한 조건이기 때문)
4. 오류를 방지하기 위해 인라인뷰로 생성해 하나의 테이블처럼 인식하게 만들고 rn을 하나의 컬럼 처럼 사용하게 만든다
5. 그렇게 만들면 제일 외부의 select 절에서 테이블 관련 조건만 처리할 수 있는 where 절에서 rn을 사용할 수 있다.
근데 밖에 있는 select -where 절을 사용하지 않고 안에서 where 절을 사용할 경우 (아래참고)
between의 문제가 발생 1부터는 가능하지만 다른 숫자 입력시 없는 레코드라고 나온다.
-잘못 사용한 예
select rownum rn, column1, column2... from (
select * from board order by ref desc, re_step asc) where rn between ? and ?
게시판에 이용하는경우 between 사이에 1~10 이외에 11~20 의 값이 들어갈경우
오류가 발생하므로 잘~묶어주도록 하자.ㅠ
(위의 두가지 경우를 제대로 확인하려면 게시판 관련 프로그램 작성시 게시글을 30개 이상 작성하고 확인해보자)
------------실제 사용한 sql 문 (확인하고 싶은 사람만 직접 table 등록 후 해보세요.. 안하는게...;;;;ㅋ)
select num, writer, email, subject, passwd, reg_date, readcount, ref, re_step, re_level, content, ip
from
(select rownum rn,num,writer,email,subject,passwd,reg_date,readcount,ref,re_step,re_level,content,ip
from (select * from board order by ref desc, re_step asc))
where rn between ? and ?);
?가 있는건 jsp에서 PrepareStatement class를 사용했음.
------------------------------------------------------------------------------
혹시 제가 잘못 알고 있다면 댓글 ^^;





최근 덧글