본문 바로가기
데이터베이스/Oracle

[Oracle] 오라클 ROWNUM과 BETWEEN을 이용한 조회

by drCode 2021. 6. 10.
728x90
반응형

 

NOTICE라는 테이블을 조회한다.

 

SELECT * FROM NOTICE;

 

여기서 이제 ROWNUM을 같이 조회할 것이다.

SELECT ROWNUM, * FROM NOTICE;

 

 

오류가 뜬다. 이유가 뭘까? 

이유는 * 앞에 어느 스키마인지 지정되지 않아서이다.

 

SELECT ROWNUM, NOTICE.* FROM NOTICE;

 

다시 실행해보면 잘 나온다.

 

 

여기서 이제 ROWNUM이 1번째에서 5번째 행까지 해당되는 데이터들을 찾아본다.

 

SELECT ROWNUM, NOTICE.* FROM NOTICE WHERE ROWNUM BETWEEN 1 AND 5;

 

 

 

그렇다면 ROWNUM을 2번째부터 조회하면 어떻게 될까?

 

SELECT ROWNUM, NOTICE.* FROM NOTICE WHERE ROWNUM BETWEEN 2 AND 5;

 

조회 결과가 나오지 않는다.

 

왜그럴까?

 

이유는 ROWNUM을 추출할때, 기준점을 1로 잡고 나머지 데이터는 상대적인 번호로 뽑게된다.

 

즉, 위의 쿼리에서 ROWNUM 1을 기준으로 조회하지 않았기 때문에 데이터를 조회할 수가 없었다.

 

 

그렇다면 FROM에 서브쿼리를 넣어서 한번 돌려보자

 

SELECT * FROM (SELECT ROWNUM, NOTICE.* FROM NOTICE)
WHERE ROWNUM BETWEEN 5 AND 9;

 

흠... 여전히 나오지 않는다.

 

WHERE 절의 ROWNUM은 바깥의 SELECT문의 ROWNUM 기준으로 잡기 때문에 

 

다시 ROWNUM을 1부터 조회해야 데이터가 나온다. 5에서 9를 조회하면 나오지 않는다.

 

어떻게 해야 결과가 나올까?

 

서브쿼리 안에 있는 ROWNUM에 다른 이름으로 Alias를 해줘야한다.

 

SELECT * FROM (SELECT ROWNUM AS NUM, NOTICE.* FROM NOTICE)
WHERE NUM BETWEEN 5 AND 9;

 

 

ROWNUM을 NUM으로 지정한 후, 결과이다.

 

원하는 형태로 출력되었다.

 

이러한 조회 기법은 나중에 페이징 처리할 때 유용하게 사용된다.

728x90
반응형

댓글