맨날 까먹어서 맨날 다시 만든다...
이건 안됨. rn을 못찾는군...
이건 되는군.
근데 웃기는건 WHERE 절을 rownum >= 2로 하면 데이타가 없다. 꼭 2가 아니라 2 이상으로 하면 안나온다.
찾아보니
이렇다는군...
그럼.
이렇게 하라는데, 이건 안쪽의 쿼리에 정렬이 없을 때에나 사용가능하다.
조건 처리 후, 정렬 하기 때문에, 정렬 후에 rownum으로 갯수를 한정하고 싶으면 서브쿼리로 해야할 듯.
삼중으로 가야할 듯 해서 뒤져보니 역시나...
SELECT rownum AS rn, A.num, A.status FROM ( SELECT num, status FROM bp_test1 WHERE status != 'D' ORDER BY status ASC, num ASC ) A WHERE rn >= 1 AND rn <= 10 |
이건 안됨. rn을 못찾는군...
SELECT rownum, A.num, A.status FROM ( SELECT num, status FROM bp_test1 WHERE status != 'D' ORDER BY status ASC, num ASC ) A WHERE rownum >= 1 AND rownum <= 10 |
이건 되는군.
근데 웃기는건 WHERE 절을 rownum >= 2로 하면 데이타가 없다. 꼭 2가 아니라 2 이상으로 하면 안나온다.
찾아보니
rownum이 1보다 크다는 조건은 항상 거짓이 됩니다. select문으로 조회된 첫 번째 로우에 대해서 rownum이 1로 지정될텐데 그럼 rownum이 1보다 크다는 조건이 거짓이 되므로 제외됩니다. 그러면 그 다음의 두번째 로우가 첫번째 로우가 되고 rownum이 1이 지정됩니다. 역시 조건이 거짓이 되므로 제외됩니다. 그런 식으로 모든 로우에 대해 조건을 만족하지 못하게 되니 조회되는게 없게 됩니다. |
이렇다는군...
그럼.
select * from ( select rownum rn, a.* from rowtest a where rownum <= 10 ) a where rn >= 6 |
이렇게 하라는데, 이건 안쪽의 쿼리에 정렬이 없을 때에나 사용가능하다.
조건 처리 후, 정렬 하기 때문에, 정렬 후에 rownum으로 갯수를 한정하고 싶으면 서브쿼리로 해야할 듯.
삼중으로 가야할 듯 해서 뒤져보니 역시나...
SELECT * FROM ( SELECT rownum rn, A.* FROM ( SELECT num, status FROM bp_test1 WHERE status != 'D' ORDER BY status ASC, num ASC ) A WHERE rownum <= 20 --Maximun ) WHERE rn >= 6 --Start# |
'프로그래밍 > DB' 카테고리의 다른 글
[ORACLE] 특수문자 입력 (0) | 2009.10.21 |
---|---|
[Oracle] Toad 단축키 (0) | 2009.08.22 |
[Oracle] [펌] sqlplus 사용법 (0) | 2009.03.24 |
[펌] MSSQL 함수모음 (0) | 2009.01.14 |
[펌] MSSQL 날짜 함수 (0) | 2009.01.14 |