작성
·
109
0
select * from tblBoard order by boardGroup desc, boardSequence asc limit #{pageStart},#{perPageNum}입니다.(MYSQL 문법)
혹시 ORACLE 문법으로 어떻게 해야하나요? 구글 검색해봐도 잘 모르겠습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
ciw님, MySQL 쿼리를 Oracle 문법으로 변경하는 것에 대해 도움을 드리겠습니다.
MySQL에서는 LIMIT
구문을 사용하여 페이징 처리를 하는 반면, Oracle에서는 ROWNUM
이나 FETCH
구문을 사용하게 됩니다. Oracle 12c 버전 이후부터는 OFFSET
과 FETCH
구문을 사용할 수 있으며 쿼리는 다음과 같이 됩니다:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY boardGroup DESC, boardSequence ASC) AS rn
FROM tblBoard
)
WHERE rn BETWEEN #{pageStart} + 1 AND #{pageStart} + #{perPageNum}
위 쿼리에서 #{pageStart}
는 시작되는 행 번호이고 #{perPageNum}
은 가져오고 싶은 행의 개수를 의미합니다. Oracle의 경우 페이지 시작 번호가 0이 아닌 1부터 시작함을 유의해 주세요.
Oracle 12c 이전 버전의 경우에는 ROWNUM
을 사용해야 하며 좀 더 복잡한 쿼리가 필요합니다. 간략하게 예시를 들면 다음과 같습니다:
SELECT *
FROM (
SELECT *, ROWNUM AS rn
FROM (
SELECT *
FROM tblBoard
ORDER BY boardGroup DESC, boardSequence ASC
)
WHERE ROWNUM <= #{pageStart} + #{perPageNum}
)
WHERE rn > #{pageStart}
이러한 방식으로 Oracle에서도 페이징 처리를 할 수 있습니다. 사용하시는 Oracle의 버전에 맞춰 적절한 쿼리를 사용하시기 바랍니다.