Cracking Code

SQL - VIEW (뷰) 본문

Database

SQL - VIEW (뷰)

CrackCo 2020. 7. 22. 19:54
데이터베이스 관리자가 아닌 사용자에게 접근성을 제한하여
테이블의 일부만 보여주거나 JOIN할 테이블의 수정을 편리하게 할 수 있는
VIEW에 대해 알아보겠습니다.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
    [(alias[, alias] ...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
-- FORCE는 기본 테이블이 없어도 강제로 뷰 생성

뷰는 테이블 또는 다른 뷰를 기초로 하는 논리적인 테이블입니다.

그 자체로는 소유하는 데이터가 없지만 창문 처럼 어떤 데이터를 보거나 변경할 수 있습니다.

뷰에서 참조하는 테이블을 기본 테이블(Base Table)이라고 합니다.

뷰를 만들기 위해선 CREATE VIEW 권한이 있어야 합니다.

 

1. 뷰(VIEW) 생성

CREATE VIEW view
AS
SELECT column1, column2, ...
FROM table
WHERE condition

 

EMP 테이블의 부서 번호가 10인 사원의 번호, 이름, 급여, 입사일을 보여주는 뷰를 만들어 봅시다.

CREATE VIEW EMP_VIEW
AS
SELECT EMPNO, ENAME, SAL, HIREDATE
FROM EMP
WHERE DEPTNO = 10;

뷰가 생성되었습니다. 뷰를 확인해봅시다.

SELECT * FROM EMP_VIEW;

사원 번호가 10인 사원들의 번호, 이름, 급여, 입사일 만 나타나는 것을 확인할 수 있습니다.

🔔뷰의 생성으로 각 테이블의 조인을 통해 복합 뷰 또한 만들 수 있습니다.

 

2. 뷰(VIEW) 수정

CREATE OR REPLACE VIEW view
AS
SELECT column1, column2, ...
FROM table;

CREATE OR REPLACE 명령문은 뷰가 존재할 땐 수정, 존재하지 않을 땐 생성을 합니다.

 

EMP_VIEW 뷰를 수정하여 부서 번호 보여주게 해봅시다.

CREATE OR REPLACE VIEW EMP_VIEW
AS
SELECT EMPNO, ENAME, SAL, HIREDATE, DEPTNO
FROM EMP
WHERE DEPTNO = 10;

뷰가 잘 수정되어 DEPTNO 컬럼도 표시되는 것을 확인할 수 있습니다.

 

3. 뷰(VIEW)의 DML 작업

단순 뷰에서는 DML 연산 (삽입, 수정, 삭제 등) 수행이 가능합니다.

행 제거 시, 뷰가 그룹함수, GROUP BY, DISTINCT 키워드를 포함한다면 불가능합니다.

행 수정 시, 뷰가 그룹함수, GROUP BY, DISTINCT 키워드 및 ROWNUM 의사열, 표현식을 포함한다면 불가능합니다.

행 삽입 시, 뷰가 그룹함수, GROUP BY, DISTINCT 키워드 및 선택되지 않은 NOT NULL 열이 기본테이블에 있을 때 불가능합니다.

 

EMP_VIEW 뷰에서 사원 번호가 7782인 사원의 정보를 삭제해봅시다.

DELETE FROM EMP_VIEW
WHERE EMPNO = 7782;

사원 번호가 7782인 사원의 정보가 삭제되었습니다.

 

기본 테이블에서 사원 번호가 7782인 사원의 정보가 어떻게 됐는지 확인해봅시다.

SELECT * FROM EMP
WHERE EMPNO = 7782;

기본 테이블인 EMP에서도 삭제된 것을 확인할 수 있습니다.

이처럼 VIEW를 조작하면 기본 테이블에도 영향이 끼친다는 것을 확인할 수 있습니다.

 

4. 뷰(VIEW)의 제약 조건

뷰의 제약 조건에는 WITH CHECK OPTION, WITH READ ONLY 제약 조건이 있습니다.

WITH CHECK OPTION은 조건절에 부합하지 않으면 INSERT, UPDATE 작업이 불가능합니다.

WITH READ ONLY는 데이터의 수정이 전혀 불가능합니다. 

 

5. 뷰(VIEW) 제거

DROP VIEW view;

뷰를 제거합니다. 기본 테이블에는 영향을 끼치지 않습니다.

'Database' 카테고리의 다른 글

SQL - INDEX  (0) 2020.07.23
SQL - SEQUENCE (시퀀스)  (0) 2020.07.22
SQL - ALTER TABLE  (0) 2020.07.22
SQL - DROP TABLE  (0) 2020.07.21
SQL - FOREIGN KEY (외래키)  (0) 2020.07.21
Comments