MySQL에서 사용하던 LIMIT 가 오라클에는 없다. 그래서 ROWNUM 을 사용하는데, 이놈이 좀 요물같아서 구글링한 자료를 바탕으로 정리해놓는다.
1.
ROWNUM 은 가상 컬럼(pseudocolumn)이다
그래서 ROWNUM 만으로 특정 row 를 불러올 수는 없다.
2.
ROWNUM은 쿼리의 조건절이 처리된 후에 할당된다. (그래서 SELECT * FROM mytable WHERE ROWNUM BETWEEN 5 AND 10 은 아무것도 반환하지 않는다. WHERE 의 조건에 맞는 row 가 없기 때문에 ROWNUM이 증가하지 않는 것이다.)
3.
ROWNUM은 sort, aggregation이 수행되기 전에 할당된다. ... WHERE ROWNUM <= 5 ORDER BY key DESC 하면 5개를 뽑은 후에 sal 순으로 소트해버린다. SELECT * FROM ( SELECT * FROM mytable ORDER BY key DESC ) WHERE ROWNUM <= 5 로 해주자.
4.
SELECT * FROM
( SELECT ROWNUM as r, a.* FROM mytable WHERE ... ORDER BY ... DESC )
WHERE r BETWEEN start AND end
_ mine
08년 7월 11일 13시 29분
여기도 뭘 좀 넣어야...