반응형
데이터베이스 뷰에 대해서 알아보기
본문 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;
반응형