ROWNUM
- ROWNUM은 ORACLE 데이터베이스의 SELECT 문 결과에 대해서 논리적인 일련번호를 부여한다.
- ROWNUM은 조회되는 행 수를 제한할 때 많이 사용된다.
- ROWNUM은 화면에 데이터를 출력할 때 부여되는 논리적 순번이다.
만약 ROWNUM을 사용해서 페이지 단위 출력을 하기 위해서는 인라인 뷰(Inline View)를 사용해야 한다.
인라인뷰(Inline View)
인라인뷰(Inline View)
- 인라인뷰는 SELECT 문에서 FROM 절에 사용되는 서브쿼리(Sub Query)를 의미한다.
SELECT * FROM //Main Query
( SELECT * FROM EMP ) a; // Sub Query(Inline View)
ROWNUM의 값을 1, 2, 3, 4, 5, 6 ... 같이 순차적으로 증가하는 ROWNUM 데이터를 얻고 싶을 때 인라인뷰를 사용하는 것이다.
ROWNUM으로 한 행을 조회
SELECT * FROM EMP
WHERE
ROWNUM <= 1;
한 행을 조회한다.
ROWNUM으로 여러 행을 조회
SELECT *
FROM (
SELECT
(1) ROWNUM list, ENAME
(2) FROM EMP )
WHERE
(3) list <= 5;
(1) ROWNUM에 별칭(Alias)을 사용한다.
(2) FROM 절에 SELECT 문을 사용하면 Inline View 라고 한다.
(3) 5건의 행을 조회한다.
SQL Server의 TOP 구문과 MySQL의 limit 구문
- Oracle은 ROWNUM을 사용하지만, SQL Server는 TOP 문을 사용하고 MySQL은 LIMIT 구를 사용한다.
즉, 10명만 인출(Fetch)하고자 할 때에는 다음과 같이 사용한다.
- SQL Server
SELECT TOP(10) FROM EMP;
- MySQL
SELECT * FROM EMP LIMIT 10;
특정 행의 리스트 조회(웹 게시판 형태)
SELECT *
FROM (
SELECT
ROWNUM list, ENAME
FROM EMP )
WHERE
list BETWEEN 5 AND 10;
- 위의 예처럼 ROWNUM 과 BETWEEN 구를 사용해서 웹 페이지 조회를 구현할 수 있다.
ROWID
- ROWID 는 ORACLE 데이터베이스 내에서 데이터를 구분할 수 있는 유일한 값이다.
- ROWID 는 "SELECT ROWID, EMPNO FROM EMP" 와 같은 SELECT 문으로 확인할 수 있다.
- ROWID 를 통해서 데이터가 어떤 데이터 파일, 어느 블록에 저장되어 있는지 알 수 있다.
ROWID 구조
구조 | 길이 | 설명 |
---|
오브젝트 번호 | 1 ~ 6 | 오브젝트(Object) 별로 유일한 값을 가지고 있으며, 해당 오브젝트가 속해 있는 값이다. |
상대 파일 번호 | 7 ~ 9 | 테이블스페이스(Tablespace)에 속해 있는 데이터 파일에 대한 상대 파일번호이다. |
블록 번호 | 10 ~ 15 | 데이터 파일 내부에서 어느 블록에 데이터가 있는지 알려준다. |
데이터 번호 | 16 ~ 18 | 데이터 블록에 데이터가 저장되어 있는 순서를 의미한다. |
ROWID 조회
SELECT
ROWID, winetypename
FROM winetype;