database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41061 게시물 읽기
No. 41061
ROWNUM 관련 질문입니다.
작성자
조동건(ceastgun)
작성일
2016-01-24 17:59
조회수
7,900

maintable 테이블에 1000건의 데이터가 들어 있습니다.

 

아래 쿼리문은 잘 됩니다.

 

SELECT *

FROM maintable

WHERE ROWNUM <= 10;

 

 

그런데 아래 쿼리문은 결과가 나오지 않습니다.

 

SELECT *

FROM maintable

WHERE ROWNUM = 10;

 

제 생각에는 10번째 ROW가 1건이 나와야할 것 같은데 왜 안나오는건가요?

 

 

이 글에 대한 댓글이 총 2건 있습니다.

ROWNUM 은 조회 결과 행의 번호입니다.
첫번째 조회결과행이 1번
두번째 조회결과행이 2번


ROWNUM <= 10 의 동작 원리
첫번째 행이 추출되고 ROWNUM 1 이므로 ROWNUM <= 10 조건 만족
두번째 행이 추출되고 ROWNUM 2 이므로 ROWNUM <= 10 조건 만족
...


ROWNUM = 10 의 동작 원리
첫번째 행이 추출되고 ROWNUM 1 이므로 ROWNUM = 10 조건 불만족
조회된 행이 없으므로 아직 rownum = 1 인 행이 나오지 않았음.
두번째 행이 추출되고 ROWNUM 은 여전히 1 이므로 ROWNUM = 10 조건 불만족
다음행도 마찬가지로 조건을 만족할 수 없음.


즉, ROWNUM 은 순차적으로 증가하는 것입니다.
ROWNUM 1 이 없이는 ROWNUM 2는 존재할 수 없음


해결방법은?
인라인뷰를 이용하여 rownum 부여를 완료한 후 밖에서 체크
SELECT *
  FROM (SELECT ROWNUM rn
             , a.*
          FROM maintable a
         WHERE ROWNUM <= 10  -- 이 조건이 성능 포인트임(누락되지 않도록 주의).
        )
 WHERE rn = 10
;

마농(manon94)님이 2016-01-25 10:19에 작성한 댓글입니다.

 마농님 답변 감사드립니다.

조동건(ceastgun)님이 2016-01-25 13:56에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41064회의실 예약 관련 추가 문의사항 [2]
IT재벌
2016-01-27
7978
41063INDEX와 상관없이 조회속도가 이상합니다. [3]
입문자
2016-01-26
7844
41062어떤 식으로 설계하면 좋을까요?
안드로메지션
2016-01-25
7790
41061ROWNUM 관련 질문입니다. [2]
조동건
2016-01-24
7900
41060auto increment trigger 관련 질문입니다.
조동건
2016-01-22
8110
41058데이터 삭제시 속도 문제 문의 [2]
이성근
2016-01-22
8175
41057쿼리해석 부탁합니다 [1]
바랑
2016-01-21
9020
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다