ORDERBY_NUM() 함수는 ROWNUM 혹은 INST_NUM() 함수와 함께, 결과 행들의 개수를 제한하는 목적으로 사용된다. 단, 차이점은 ORDER BY 절 뒤에 결합되어 사용되고, 이미 정렬을 수행한 결과에 대해 순서를 부여한다는 점이다.
즉, ORDER BY 절이 포함된 SELECT 문장에서 조건절에 ROWNUM을 이용하여 일부 결과 행들만 조회하는 경우, ROWNUM이 먼저 적용된 후 ORDER BY에 의한 정렬이 수행된다. 반면, ORDERBY_NUM() 함수를 이용하여 일부 결과 행들만 조회하는 경우, ORDER BY에 의한 정렬이 이루어진 결과에 대해서 ROWNUM이 적용된다.
FOR ORDERBY_NUM()
다음은 history 테이블에서 3위에서 5위까지의 선수 이름과 기록을 조회하는 예제이다. .(demodb)
--Ordering first and then limiting rows using FOR ORDERBY_NUM()
SELECT athlete, score FROM history
ORDER BY score FOR ORDERBY_NUM() BETWEEN 3 AND 5;
athlete score
============================================
'Luo Xuejuan' '01:07.0'
'Rodal Vebjorn' '01:43.0'
'Thorpe Ian' '01:45.0'
--Limiting rows first and then Ordering using ROWNUM
SELECT athlete, score FROM history
WHERE ROWNUM BETWEEN 3 AND 5 ORDER BY score;
athlete score
============================================
'Thorpe Ian' '01:45.0'
'Thorpe Ian' '03:41.0'
'Hackett Grant' '14:43.0'