View
#
Find similar titles
-
최초 작성자
jipark@insilicogen.com
- 최근 업데이트
Structured data
- Category
- Database
Table of Contents
View #
뷰(view)는 관계 데이터베이스의 데이터베이스 언어 SQL에서 하나 이상의 테이블 (또는 다른 뷰)에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나타낸 것이다. 또한 관계 데이터베이스의 관계 모델의 관계의 일종인 도출 관계에 해당한다. 여러 테이블(기본 관계) 또는 뷰의 데이터를 연결하여 조합할 수 있다. 대략적인 특징은 아래와 같다.
- 뷰는 하나의 가상 테이블(Virtual Table)이라 생각 하면 된다.
- 뷰는 실제 데이터가 저장 되는 것은 아니지만 뷰를 통해 데이터를 관리할 수 있다.
- 뷰는 복잡한 Query를 통해 얻을 수 있는 결과를 간단한 Query로 얻을 수 있게 한다.
- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색할 수 있다.
- 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.
View 사용의 장점 #
뷰의 장점 | 설명 |
---|---|
독립성 | 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. |
편리성 | 복잡한 Query를 뷰로 생성함으로써 관련 Query를 단순하게 작성할 수 있다. 또한 해당 형태의 SQL 문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다. |
보안성 | 직원의 급여정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 Column을 빼고 생성함으로써 사용자에게 정보를 감출 수 있다. |
View의 제약조건 #
- 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 돼있어야 한다.
- ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터도 INSERT할 수 없다
- WITH READ ONLY 옵션을 설정한 뷰도 데이터를 갱신할 수 없다.
- WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제,수정을 할 수 있다
예제 #
View의 문법은 DBMS마다 조금씩 다르지만 대부분 비슷한 경우가 많다. 해당 문서에서는 가장많이 사용하는 DBMS중의 하나인 ORACLE에 대한 View의 사용법을 알아보도록 한다.
-
View 생성
CREATE OR REPLACE VIEW name_view AS SELECT a.ename, b.name FROM emp a, dept b WHERE a.deptno = d.deptno AND b.deptno = 20;
-
View 조회
SELECT * FROM name_query;
-
View 데이터 삽입
INSERT INTO name_view(val1, val2, val3...) VALUES (val1, val2, val3...)
-
WITH CHECK OPTION(View의 조건을 만족하는 데이터만 insert 또는 update 가능하도록 한다)
[부서번호 10의 데이터를 조회하는 View] CREATE OR REPLACE VIEW check_option AS SELECT empno, ename, deptno FROM emp WHERE deptno = 10 WITH CHECK OPTION ; [부서 번호가 10인 사원만 INSERT, UPDATE할 수 있다] SQL> INSERT INTO check_option(empno, ename, deptno) VALUES (10005, 'jain', 30); INSERT INTO check_option(empno, ename, deptno) * 1행에 오류: ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다
-
WITH READ ONLY(SELECT만 가능한 View를 생성한다)
CREATE OR REPLACE VIEW read_only AS SELECT empno, ename, deptno FROM emp WHERE deptno = 10 WITH READ ONLY;
-
View 수정
ALTER VIEW name_view AS SELECT SELECT a.ename, b.name, b.email, b.mobile FROM emp a LEFT JOIN dept b ON (a.deptno = b.deptno) WHERE b.deptno = 20;
-
View 삭제
DROP VIEW name_view;
-
View 정보 조회
DESCRIBE name_view;
-
View 소스코드 확인
SHOW CREATE VIEW name_view;