티스토리 뷰

SELECT를 사용하여 결과집합을 조회하게 되면 만들지 않은 ROWNUM이 자동으로 생기게 됩니다. 왼쪽에 있는 빨간색 사각형이 ROWNUM에 해당하는 부분입니다.

SELECT * FROM NOTICE;

 

상위 5개의 결과만 보기 위해서 다음과 같은 SQL을 사용할 수 있습니다.

SELECT * FROM NOTICE WHERE ROWNUM BETWEEN 1 AND 5;

 

6번째부터 10번째를 조회하려면 위 내용을 응용해 다음과 같이 작성하면 된다고 생각할 수 있습니다.

SELECT * FROM NOTICE WHERE ROWNUM BETWEEN 6 AND 10;

하지만 아무것도 출력되지 않았습니다. 왜 이런 현상이 발생할까요?

ROWNUM은 결과집합을 만든 후 하나하나 넘버링 하는 것이 아니기 때문입니다.

 

SELECT를 사용했고 결과집합을 가져오기 직전의 상태입니다. 기본적으로 ROWNUM은 1이 있는 것을 알 수 있습니다. 이 상태에서

WHERE ROWNUM>=2;

와 같은 절이 추가적으로 있다면 현재 ROWNUM이 1이므로 결과집합에 정보를 가져올수 없습니다. 만약

WHERE ROWNUM>=1;

이 있었다면 데이터를 가져오는데에 성공하고 결과집합은 다음과 같은 상태가 될 것입니다.

 

 

다음과 같이 작성하여 6번째부터 10번째 정보를 가져와야 합니다.

SELECT * FROM (SELECT ROWNUM AS NUM,NOTICE.* FROM NOTICE) WHERE NUM BETWEEN 6 AND 10;

 

소괄호에 있는 내용을 살펴보겠습니다.

SELECT ROWNUM AS NUM, NOTICE.* FROM NOTICE;

AS는 별칭을 사용하는 것임을 알 수 있고, 처음보는 것은 에스터리스크에 NOTICE.가 추가적으로 있는 것입니다.

에스터리스크는 기본적으로 '모든'을 나타내므로 다음과 같이 사용하면 ROWNUM을 중복으로 포함하므로 에러를 발생합니다. 

SELECT ROWNUM,* FROM NOTICE;

즉 NOTICE.*를 통해 범위를 명시하여 ROWNUM과 겹치지 않도록 해야합니다.

 

소괄호에 있는 SQL을 실행하면 다음과 같은 결과집합이 만들어집니다. NUM COLUMN이 추가적으로 생긴 것을 알 수 있습니다.

 

별칭을 사용하지 않고 그대로 ROWNUM을 사용하게 되면 소괄호에 있는 명시적인 ROWNUM을 사용하는 것이 아닌 자동으로 만들어주는 ROWNUM을 우선적으로 사용하게 됩니다. 

 

출처

www.youtube.com/channel/UC5-ixpj8DioZqmrasj6Ihpw

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함