본문 바로가기
카테고리 없음

[DB VIEW]데이터베이스에서 뷰란? (실습 포함)

by 리승연 2018. 11. 6.
반응형

데이터베이스 뷰에 대해서 알아보기

본문 8번부터 오라클 기준으로 실습 코드 있음

1. 뷰란?

  • 뷰의 일반 사용자 입장에서는 테이블과 동일하게 사용하는 개체이다. 뷰는 한 번 생성해 놓으면 테이블이라고 생각하고 사용해도 될 정도로 사용자들의 입장에서는 테이블과 거의 동일한 개체로 여겨진다.

 

2. 뷰의 정의

  • 테이블에 대한 가상의 테이블로 테이블처럼 직접 데이터를 소유하지 않고 검색 시 이용할 수 있도록 정보로 담고 잇는 개체이다.

 

3. 뷰 작동방식

  • 뷰에 레코드(=행, 로우) 입력 가능하나 권장하지 않는다.
    다른 사람들이 여러분의 머신에서 로그인 할 경우에 노출 될 수도 있기 때문이다.
  • 뷰의 주용도는 SELECT
  • 읽기 전용 뷰에서는 DML 작업을 수행할 수 없다.

 

4. 뷰 사용 목적

  • 테이블에 대한 보안 기능 설정
  • 복잡한 쿼리 단순화

 

5. 뷰 생성 권한 부여

  • cmd>sqlplus / as sysdba;
  • SQL>grant create view to 사용자;

 

6. 뷰 생성

  • CREATE OR REPLACE VIEW[FORCE | NOFORCE] 뷰이름 (컬럼리스트) AS [쿼리]
    • replace: 이미 존재하는 뷰의 내용을 수정
  • CREATE OR REPLACE VIEW VIEWTBL(테이블 ) AS SELECT DEPTNO, EMPNO, ENAME, FROM EMP;
  • CREATE VIEW는 기존의 뷰가 있으면 오류가 발생하지만,
    CREATE OR REPLACE VIEW는 기존의 뷰가 있어도 덮어쓰는 효과를 내기 때문에 오류가 발생하지 않는다.
    , DROP VIEW와 CREATE VIEW를 연속으로 사용한 효과를 갖는다.

 

7. 뷰 수정, 삭제, 옵션

  • (수정) CREATE OR REPLACE
  • (삭제) DROP VIEW 뷰이름
  • (옵션) OR REPLACE: 이미 존재하는 뷰에 대해서 새롭게 변경하여 재생성
  • (옵션) FORCE: 기본 테이블의 존재 유무에 상관없이 뷰를 생성해야 경우에 사용
  • (옵션) WITH CHECK OPTION: 해당 뷰를 통해서 있는 범위 내에서만 UPDATE 또는 INSERT 가능
  • (옵션) WITH ONLY READ: SELECT만 가능

 

8. 뷰 실습(오라클 기준)

(선행) 뷰 실습하기 앞서 아래 테이블을 먼저 생성 및 데이터 추가 해준다.

/* 사원 테이블 생성 */
CREATE TABLE EMP(
	deptno number, -- 부서번호
    empno number,  -- 사원번호
    ename varchar2(20), -- 사원명
    tel number -- 사원 전화번호
);

/* 사원 테이블에 데이터 추가 */
INSERT INTO EMP VALUES (20, 23, 'winkite', 5808);
INSERT INTO EMP VALUES (18, 23, 'cosmicdust', 0072);
INSERT INTO EMP VALUES (11, 23, 'pretty', 8494);
INSERT INTO EMP VALUES (07, 23, 'turtle', 7308);


/* 사원디테일 테이블 생성 */
2. EMP_DTL 테이블 생성
CREATE TABLE EMP_DTL(
	deptno number, -- 부서번호
    empno number,  -- 사원번호
    ename varchar2(20), -- 사원명
    tel number -- 사원 전화번호
);

/* 사원디테일 테이블에 데이터 추가 */
INSERT INTO EMP_DTL VALUES (20, 21, '재은', 0356);
INSERT INTO EMP_DTL VALUES (18, 24, '종원', 6597);
INSERT INTO EMP_DTL VALUES (11, 24, '재홍', 6504);
INSERT INTO EMP_DTL VALUES (25, 25, '홍일', 9888);

/* 부서 테이블 생성 */
CREATE TABLE DEPT (
	deptno number, -- 부서번호
	dname varchar2(20) -- 부서명
);

/* 부서  테이블에 데이터 추가 */
INSERT INTO DEPT VALUES (20, '인사');
INSERT INTO DEPT VALUES (09, '홍보');
INSERT INTO DEPT VALUES (44, '기획');

 


1) 뷰 생성 

CREATE OR REPLACE VIEW VIEWTBL  AS SELECT DEPTNO, EMPNO, ENAME FROM EMP;

1-1) 뷰 옵션

CREATE OR REPLACE VIEW VIEWTBL_DTL AS SELECT DEPTNO, EMPNO, ENAME FROM EMP_DTL WITH READ ONLY;


2) 생성된 뷰는 테이블처럼 사용

SELECT * FROM VIEWTBL;


3) 현재 계정에 있는 테이블, 뷰 목록 확인

SELECT * FROM TAB;


4) 뷰 세부 정보 확인

SELECT * FROM USER_VIEWS;


좌) 변경 전 /  우) 변경 후

5) 뷰 수정

CREATE OR REPLACE VIEW VIEWTBL(DEPTNO, E_NO, E_NAME) AS SELECT DEPTNO, EMPNO, ENAME FROM EMP;


6) 뷰 삭제 

DROP VIEW VIEWTBL;

반응형