-- 1. 뷰의 개념
-- 2. 뷰의 내부구조와 USER_VIEWS 데이터 딕셔너리
-- 3. 뷰를 사용하는 이유
-- 4. 뷰의 종류
-- 5. 뷰 삭제와 다양한 옵션
-- 6. 뷰 활용하기
-- 01. 뷰의 개념
-- 뷰(view)는 한마디로 물리적인 테이블을 근거한 논리적인 가상 테이블이다.
-- 가상이란 단어는 실질적으로 데이터를 저장하고 있지 않기 때문에 붙인 것이고,
-- 테이블이란 단어는 실직적으로 데이터를 저장하고 있지 않더라도 사용자는 마치 테이블을
-- 사용하는 것과 동일하게 뷰를 사용할 수 있기 떄문에 붙인 것입니다.
-- 뷰는 기본 케이블에서 파생된 객체로서 기본 테이블에 대한 하나의 쿼리문이다.
-- 뷰(View)란 '보다'란 의미를 갖고 있는 점을 감안해 보면 알 수 있듯이 실제 테이블에
-- 저장된 데이터를 뷰를 통해서 볼 수 있도록 한다.
-- 사용자에게 주어진 뷰를 통해서 기본 테이블을 제한적으로 사용하게 된다.
-- 1.1 뷰의 기본 테이블
-- 뷰는 이미 존재하고 있는 에티블에 제한적으로 접근하도록 한다.
-- 뷰를 생성하기 위해서 실질적으로 데이터를 저장하고 있는 물리 테이블이 존재해야 하는데
-- 이 테이블을 기본 테이블이라고 한다.
-- <실습하기> 뷰의 기본 테이블 생성하기
-- 1. DEPT COPY를 DETP 테이블의 복사본으로 생성하라.
create table dept_copy
as
select * from dept;
-- 2. emp 테이블의 복사본으로 emp_copy를 생성하라.
create table emp_copy
as
select * from emp;
-- 1.2 뷰를 생성하기 위한 기본 형식
-- create [or replace] [force | noforce] view view_name
-- [(alias, alias, alias, ...)]
-- as subquery
-- [with check option]
-- [with read only];
-- CREATE OR RELPACE VIEW
-- 뷰를 만들 때 CREATE OR RELPACE VIEW 대신 그냥 CREATE VIEW만 사용해도 됩니다.
-- CREATE OR RELPACE VIEW는 새로운 뷰를 만들 수 있을 뿐만 아니라 기존의 뷰가 존재하더라도
-- 삭제하지 않고 새로운 구조의 뷰로 변경(REPLACE)할 수 있습니다.
-- FORCE
-- FORCE를 사용하면, 기본 테이블의 존재 여부에 상관없이 뷰를 생성합니다.
-- WITH CHECK OPTION
-- WITH CHECK OPTION을 사용하면, 해당 뷰를 통해서 볼 수 있는
-- 범위 내애서만 UPDATE 또는 INSERT가 가능합니다.
-- WITH READ ONLY
-- WITH READ ONLY를 사용하면 해당 뷰를 통해서는 SELECT만
-- 가능하며 INSERT/UPDATE/DELETE를 할 수 없게 됩니다.
-- 만약 이것을 생략한다면, 뷰를 사용하여 추가, 수정, 삭제가 모두 가능합니다.
-- 1.2 뷰 정의하기
-- 자주 사용되는 30번 부서에 소속된 사원들의 사번과 이름과
-- 부서전호를 출력하기 위한 SELECT문을 하나의 뷰로 정의해봅시다.
create view emp_view30
as
select empno, ename, deptno
from emp_copy
where deptno=30;
-- 뷰는 테이블에 접근(select)한 것과 동일한 방법으로 결과를 얻을 수 있습니다.
select * from emp_view30;
desc emp_view30;
-- <탄탄히 다지기>
create view emp_view20
as
select empno, ename, deptno, mgr
from emp_copy
where deptno=20;
select * from emp_view20;
-- 02. 뷰의 내부구조와 USER_ViEWS 데이터 딕셔너리
-- CREATE VIEW 명령어로 뷰를 정의할 때 AS 절 다음에 기술한
select empno, ename, deptno, mgr
from emp_copy
where deptno=20; -- 여기를 말하는 듯.
-- 쿼리 문장 자체를 저장하고 있습니다.
-- USER_VIEWS에서 테이블 이름과 텍스트만 출력해보시오.
select view_name, text from user_views;
-- 기본 테이블은 디스크 공간을 할당 받아서 실질적으로 데이터를 저장하고 있지만,
-- 뷰는 데이터 딕셔너리 USER_VIEWS에 사용자가 뷰를 정의할 때 기술한 서브 쿼리문(SELECT문)
-- 만을 문자열 형태로 저장하고 있습니다.
-- <실습하기> 뷰와 기본 테이블 관계 파악하기
-- 기본 테이블을 가져다가 쿼리문을 수행한다는 것을 증명하기 위해 간단한 예제를 해보시오.
-- 1. 다음은 EMP_VIEW30 뷰에 행을 하나 추가하는 문장입니다.
insert into emp_view30
values(1111, 'AAAA', 30);
-- 2. INSERT 문으로 뷰에 새로운 행을 추가하였습니다.
-- 뷰의 내용을 출력해보면 행이 뷰에 존재하고 있음을 확인할 수 있다.
select * from emp_view30;
-- 3. view 뿐만 아니라 기본 테이블의 내용을 출력해보면 추가한 행이 기본 테이블에도 존재함을 확인할 수 있다.
select * from emp_copy;
-- 정리 : view는 물리적인 테이블을 근거로 한 논리적인 가상 테이블이다.
-- 03. 뷰를 사용하는 이유
-- 1. 복잡하고 긴 쿼리문을 뷰로 정의하면 접근을 단순화시킬 수 있다.
-- 2. 보안에 유리하다.
-- 04. 뷰의 종류
-- 단순뷰(Simple View)와 복합 뷰(Complex View)로 나뉜다.
-- 단순뷰
-- 하나의 테이블로 생성
-- 그룹 함수의 사용이 불가능하다.
-- DISTINCT 사용이 불가능하다
-- DML 사용가능하다
-- 복합뷰
-- 여러 개의 테이블로 생성
-- 그룹 함수의 사용이 가능
-- DISTINCT 사용이 가능
-- DML 사용 불가능
-- 4.1 단순 뷰
-- 1. 뷰 정의에 포함되지 않는 컬럼 중에 기본 테이블의 칼럼이 NOT NULL
-- 제약 조건이 지정되어 있는 경우 INSERT 문이 사용 불가능합니다.
-- 왜냐하면 뷰에 대한 INSERT 문은 기본 테이블에 NULL 값을 입력하는 형태가 되기 때문입니다.
-- 2. SAL*12와 같이 산술 표현식으로 정의한 가상 칼럼이 뷰에 정의되면 INSERT나 UPDATE가 불가능합니다.
-- 3. DISTINCT을 포함한 경우에도 DML 명령을 사용할 수 없습니다.
-- 4. 그룹 함수나 GROUP BY 절을 포함한 경우에도 DML 명령을 사용할 수 없습니다.
-- 4.2 복합 뷰
-- <실습하기> 복합 뷰 만들기
-- 1. 다음은 사번, 이름, 급여, 부서번호, 부서명, 지역명을 출력하기 위한 복합 뷰입니다.
CREATE VIEW EMP_VIEW_DEPT
AS
SELECT E.EMPNO, E.ENAME, E.SAL, E.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY EMPNO DESC;
-- 2. 뷰를 생성한 후, 이를 활용하면 복잡한 질의를 쉽게 처리할 수 있습니다.
select * from emp_view_dept;
'Study > OracleDB' 카테고리의 다른 글
36강 오라클 인덱스 (1) | 2022.09.12 |
---|---|
35강 오라클 시퀀스 (1) | 2022.09.12 |
33강 오라클 데이터 무결성을 위한 제약 조건 (4) | 2022.09.12 |
32강 테이블 구조 생성, 변경 및 삭제하는 DDL(2) (1) | 2022.09.11 |
31강 테이블 구조 생성, 변경 및 삭제하는 DDL(1) (1) | 2022.09.11 |