1. View
- 하나 이상의 테이블을 조회하는 SELECT문을 저장한 객체를 뜻하며, Virtual table로 불린다.
- SELECT문을 저장하기 때문에 물리적 데이터를 따로 저장하지는 않는다.
/* View 예시 */
SELECT *
FROM USER_VIEWS;
1.1 뷰의 사용 목적
구분 | 설명 |
편리성 | SELECT문의 복잡도를 완화하기 위해 사용한다. |
보안성 | - 테이블의 특정 열을 노출하고 싶지 않을 때 사용한다. - 테이블의 일부 데이터 또는 조인이나 여러 함수 등으로 가공을 거친 데이터만 SELECT하는 뷰 열람 권한을 제공함으로써 불필요한 데이터 노출을 막을 수 있다. |
1.2 뷰 생성
/* CREATE VIEW */
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 (열이름1, 열이름2, ..., 열이름n)
AS (저장할 SELECT문)
[WITH CHECK OPTION [CONSTRAINT 제약조건]]
[WITH READ ONLY [CONSTRAINT 제약조건]];
요소 | 설명 |
ON REPLACE | 같은 이름의 뷰가 이미 존재할 경우에 현재 생성할 뷰로 대체하여 생성한다. |
FORCE | 뷰가 저장할 SELECT문의 기반 테이블이 존재하지 않아도 강제로 생성한다. |
NOFORCE | - 뷰가 저장할 SELECT문의 기반 테이블이 존재할 경우에만 생성한다. - 생략할 경우의 기본값이 된다. |
뷰 이름 | - 생성할 뷰 이름을 지정한다. - 필수값이다. |
열 이름 | SELECT문에 명시된 이름 대신 사용할 열 이름을 지정한다. |
저장할 SELECT문 | - 생성할 뷰에 저장할 SELECT문을 지정한다. - 필수값이다. |
WITH CHECK OPTION | 지정한 제약 조건을 만족하는 데이터에 한해 DML 작업이 가능하도록 뷰를 생성한다. |
WITH READ ONLY | 뷰의 열람, 즉 SELECT만 가능하도록 뷰를 생성한다. |
- CREATE문으로 생성할 수 있다.
/* CREATE VIEW 예시 */
CREATE VIEW VW_EMP20
AS (SELECT EMPNO, ENAME, JOB, DEPTNO
FROM EMP
WHERE DEPTNO=20);
1.3 뷰 삭제
- DROP문을 사용해서 뷰를 삭제할 수 있다.
- 뷰는 실제 데이터가 아닌 SELECT문만 저장하므로 뷰를 삭제해도 테이블이나 데이터가 삭제되지는 않는다.
/* DROP VIEW 예시 */
DROP VIEW VW_EMP20;
2. Inline view를 사용한 TOP-N SQL문
- Inline view와 ROWNUM을 사용하면 ORDER BY절을 통해 정렬된 결과 중 최상위 몇 개 데이터만을 출력하는 것이 가능하다.
/* Inline view로 TOP-N 추출 예시 : Subquery 사용 */
SELECT ROWNUM, E.*
FROM (SELECT *
FROM EMP
ORDER BY SAL DESC) E
WHERE ROWNUM <= 3;
/* Inline view로 TOP-N 추출 예시 : WITH절 사용 */
WITH E AS (SELECT * FROM EMP ORDER BY SAL DESC)
SELECT ROWNUM, E.*
FROM E
WHERE ROWNUM <= 3;
2.1 Pseduo Column
- 데이터가 저장되는 실제 테이블에 존재하지는 않지만 특정 목적을 위해 테이블에 저장되어 있는 열처럼 사용 가능한 열을 의미한다.
- 오라클에서는 ROWNUM과 ROWID가 대표적이다.
- ROWNUM의 경우 데이터를 하나씩 추가할 때 매겨지는 번호이므로 ORDER BY절을 통해 정렬해도 유지되는 특성이 있다. 때문에 TOP-N을 출력하기 위해서는 ORDER BY로 데이터를 먼저 정렬한 후에 ROWNUM을 매겨야 한다.
참고
- 『오라클로 배우는 데이터베이스 입문』
'Database' 카테고리의 다른 글
Synonym (0) | 2021.10.28 |
---|---|
Sequence (0) | 2021.10.28 |
Index (0) | 2021.10.26 |
Data Dictionary (0) | 2021.10.26 |
DDL(Data Definition Language) (0) | 2021.10.25 |