파게로그
ROWNUM 본문
조회를 하면 결과집합을 내어놓으면서 ROWNUM이라는 (보이지 않는) 번호가 추가된다.
ROWNUM | 이름 | 아이디 번호 | 계정 생성연도 |
1 | 홍길동 | 1056 | 1755 |
2 | 임꺽정 | 2355 | 1830 |
3 | 이순신 | 714 | 1815 |
이 ROWNUM은 실제로 사용 가능할까?
SELECT * FROM MEMBER WHERE ROWNUM BETWEEN 1 AND 2; -- 실행 가능
SELECT * FROM MEMBER WHERE ROWNUM BETWEEN 1 AND 5; -- 아무것도 조회되지 않음
결과집합을 만들 때(SELECT에서 WHERE문이 실행될 때) ROWNUM이 만들어지는 것
ROWNUM을 먼저 맞추어놓고, 그 후 서버에서 결과를 가져와서 데이터를 넣음.
맞지 않는 데이터는 ROWNUM은 그대로 두고 빼버림
SELECT * FROM (SELECT ROWNUM NUM, MEMBER.* FROM MEMBER) WHERE NUM BETWEEN 1 AND 5;
<설명>
원래는 SELECT TITLE, CONTENT, WRITER FROM NOTICE도
SELECT NOTICE.TITLE, NOTICE.CONTENT, NOTICE.WRITER FROM NOTICE이다.
묵시적 생략이었음. *도 마찬가지임. SELECT NOTICE.* FROM NOTICE;
이런 성질을 이용해서 SELECT ROWNUM, NOTICE.* FROM NOTICE; 사용 가능
SELECT * FROM (SELECT ROWNUMi, NOTICE.* FROM NOTICE) WHERE ROWNUMj BETWEEN 6 AND 10
j는 i를 쓰려고 했으나 바깥쪽 테이블의 ROWNUM을 일컫게 되므로 아래와 같이 별칭을 지정한다.
SELECT * FROM (SELECT ROWNUM NUM, NOTICE.* FROM NOTICE) WHERE NUM BETWEEN 6 AND 10
'콤퓨타 왕기초 > Oracle DB' 카테고리의 다른 글
정규식을 이용한 패턴 비교 (0) | 2021.03.12 |
---|---|
연산자(패턴비교) (0) | 2021.03.12 |
연산자(산술, 비교, 관계) (0) | 2021.03.12 |
TRANSACTION, COMMIT, ROLLBACK (0) | 2021.03.12 |
테이블 수정 (0) | 2021.02.23 |