ROWNUM
ROWNUM은 Oracle 데이터베이스에서 사용되는 가상 컬럼(Virtual column)으로, 각 행의 고유한 순번을 말한다.
테이블에 저장된 데이터의 물리적인 순서를 기반으로 합니다. 따라서 ROWNUM을 이용해 조회된 결과의 순서는 보장되지 않는다.
이 쿼리는 "NOTICE" 테이블에서 ROWNUM이 1에서 5 사이인 모든 행을 검색한다. 하지만 6에서 10사이 모든 행을 검색 할 경우, 데이터 검색이 되지않는다. 그 이유는 행의 순번이 아닌, ROWNUM로 지정되어 검색되기떄문에, 고유 순번을 지정하지 않는 이상 데이터 조회가 이루어지지 않는다.
고유 순번 생성
SELECT ROWNUM, NOTICE. * FROM NOTICE;
"NOTICE" 테이블의 모든 행을 검색하고, 각 행의 ROWNUM을 검색한 후, 테이블의 모든 열을 나열한다.
즉, 결과 집합에는 ROWNUM과 NOTICE 테이블의 모든 열이 포함된다.
SELECT * FROM (SELECT ROWNUM NUM, NOTICE. * FROM NOTICE)
WHERE NUM BETWEEN 6 AND 10;
WHERE 절에서 ROWNUM > 5 AND ROWNUM < 10과 같이 ROWNUM 범위를 지정하면, 데이터베이스 엔진은 5개 이상의 행을 검색하지 않고 () 밖의 SELECT * FROM 기준으로 행을 검색하고 쿼리를 종료하기 때문에
위와 같은 쿼리는 인라인 뷰를 사용하여 NOTICE 테이블의 모든 행에 ROWNUM을 할당한 다음, WHERE 절에서 NUM을 이용해 6에서 10 사이의 범위를 지정하여 6번째 행에서 10번째 행까지의 데이터를 정확히 가져올 수 있다.
유튜브 뉴렉쳐님의 Oracle 강의 기반으로 공부한 것을 작성한 블로그입니다.
출처 : 오라클(Oracle) SQL 강의 - 유튜브 뉴렉처
'DB > Oracle' 카테고리의 다른 글
Oracle DB - 문자열 함수 SUBSTR (0) | 2023.04.26 |
---|---|
Oracle DB - DISTINCT (중복 값 제거하기) (0) | 2023.04.22 |
Oracle DB - 연산을 통한 데이터 조회 (0) | 2023.04.17 |
Oracle DB - 데이터 수정 및 삭제 (UPDATE / DELETE) (0) | 2023.04.17 |
Oracle DB - 테이블 수정하기(ALTER TABLE) (0) | 2023.04.16 |