SQLD - ROWNUM과 ROWID

헨도·2024년 2월 20일
0

SQLD

목록 보기
22/28
post-thumbnail

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;
  • 모든 테이블은 ROWID를 가지고 있다.
profile
Junior Backend Developer

0개의 댓글