[Oracle] 오라클 limit 사용하는 방법 (페이징, rownum)

MySql이나 postgreSQL에서 사용하는 LIMIT을 오라클에서 사용하고 싶을 때가 있다. 그러나 아쉽게도 오라클에서는 LIMIT를 사용할수 없다.


오라클에서 LIMIT 대신 ROWNUM을 사용하면 된다고 하는데, LIMIT와 ROWNUM은 사용법과 용도가 전혀 다르다는것을 알고 사용해야 한다.


LIMIT는 쿼리가 ORDER BY 절까지 모두 실행 후 해당 결과에서 원하는 행의 데이터를 가져오는 것이며, ROWNUM은 쿼리가 완전히 수행되지 않은 원 데이터의 정렬순서대로 번호를 매기기 때문에 전혀 다른 결과가 출력된다.


※ ROWNUM은 <, <= 두가지 연산자만 사용가능 하다, (단 1행은 예외, =1, >=1, <=1)



MySql 쿼리

MySql에서 사원명(ENAME)로 정렬 후 결과에서 2행을 가져오는 쿼리이다


Oracle 쿼리

오라클에서 ROWNUM으로 2건의 데이터를 가져오는 쿼리를 수행 하였는데, MySql과 다른 결과가 출력 된다

오라클에서 LIMIT와 동일한 결과를 얻기 위해서는 SELECT절로 한번 감싼후에 ROWNUM으로 조건을 주면 LIMIT와 동일한 결과가 출력된다

SELECT * FROM ( SELECT * FROM EMP

WHERE JOB = 'SALESMAN' ORDER BY ENAME ) WHERE ROWNUM <= 2


MySql 쿼리

MySql에서 LIMIT는 원하는 구간의 행을 출력 할 수 있다. 아래는 7번째 행에서 부터 3건의 데이터를 출력하는 쿼리이다


Oracle 쿼리

오라클에서 원하는 구간의 행을 출력하기 위해서는 조금 복잡하다. 내부 쿼리에서 ROW_NUMBER()와 같은 순위 함수를 사용하여 행의 번호를 지정한 다음 해당 번호의 구간을 잘라야 한다

SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY ENAME) NUM , A.* FROM EMP A ORDER BY ENAME ) WHERE NUM BETWEEN 7 AND 9

해당 쿼리에서 ORDER BY가 필요 없다면 ROWNUM 키워드를 이용하여 행의 번호를 매길 수 있다

 

댓글

Designed by JB FACTORY