maintable 테이블에 1000건의 데이터가 들어 있습니다.
아래 쿼리문은 잘 됩니다.
SELECT *
FROM maintable
WHERE ROWNUM <= 10;
그런데 아래 쿼리문은 결과가 나오지 않습니다.
WHERE ROWNUM = 10;
제 생각에는 10번째 ROW가 1건이 나와야할 것 같은데 왜 안나오는건가요?
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 ;
마농님 답변 감사드립니다.