티스토리 뷰
View : 자체적으로 데이터를 포함하거나 저장하지 않은 논리적인 구조로서 기본 테이블의 데이터를 조회하고 변경할 수 있는 창
- 가상 테이블 개념 -> 데이터를 물리적으로 갖지 않음
- 저장 공간이 없음
- 쿼리문을 저장하고 있는 객체
목적
- 직접적인 테이블 접근을 제한
- 복잡한 질의를 쉽게 만들기 위함
- 보안에 유리
특징
- 테이블에 대한 제한을 갖고 있음
- 테이블의 일정한 부분만 볼 수 있는 가상 테이블
- 실제 자료를 갖지 않지만, 테이블 관리 가능
- 하나의 테이블에 뷰의 갯수는 제한이 없음
- 데이터를 물리적으로 갖고 있지 않음
#테이블과 달리 뷰는 이미 존재하는 테이블을 근거로 한 쿼리문 형태로 저장 -> 기본 테이블이 존재해야 함
기본 형태
CREATE VIEW 뷰이름 AS 쿼리문;
#AS 뒤에 나오는 쿼리문을 뷰가 저장
장점
- 논리적 독립성 제공
- 데이터 접근 제어로 보안 가능
- 사용자 데이테 관리가 간편해짐
- 하나이상의 테이블로 각각 다른 결과를 낼 수 있는 수많은 뷰 정의 가능
단점
- 독자적 인덱스를 갖을 수 있음
뷰 종류
종류 |
단순 뷰 (Simple View) |
복합 뷰 (Complex View) |
테이블수 |
1개 |
2개이상 |
그룹 함수 |
사용 불가능 |
사용 가능 |
DISTINCT |
사용 불가능 |
사용 가능 |
DML문 |
사용 가능 |
사용 불가능 |
뷰 생성 전 권한 부여
GRANT CREATE VIEW TO 사용자명;
뷰 생성
- CREATE
- 기존에 있는 dept 테이블과 emp 테이블의 회손을 막기 위해 복사해서 사용
- 조건 : 30번 부사에 소속된 사원들의 번호, 이름, 부서번호 출력
뷰 데이터 추가
- INSERT
데이터가 추가된 것을 확인할 수 있다
테이블에도 데이터가 추가된것을 확인할 수 있다
#테이블 칼럼이 NOT NULL 제약조건이 지정되어 있으면 데이터 추가 불가
뷰에 관련된 데이터 딕셔너리
- 사용자가 생성한 모든 뷰에 대한 정의는 USER_VIEWS라는 이름의 데이터 딕셔너리에 저장되어 있음
단순 뷰
데이터 추가
- INSERT
그룹 함수 사용
- GROUP BY
급여의 총액과 평균을 구하는 칼럼에 별칭을 부여해서 생성
DEPTNO 기준
#가상 칼럼을 사용하기 위해서는 사용자가 반드시 별칭을 부여해서 이름을 설정해야 한다
뷰 삭제
- DROP
SAL_VIEW 삭제 후 확인
뷰 수정
- CREATE OR REPLACE VIEW
-> 존재하지 않은 뷰면 새로 생성되고, 기존에 존재하면 내용을 변경함
기본 테이블 없이 뷰 생성
- FORCE
경고문과 함께 뷰가 생성이 된다
Q. 만약 FORCE로 뷰를 생성하고 테이블을 생성하면 어떻게 될까?
A. 자동적으로 뷰는 테이블을 참고한다
뷰의 여러가지 옵션
- UPDATE
30번 부서에서 급여가 1000이상인 사원들을 20번 부서로 이동
- WITH CHECK OPTION
-> 뷰 생성시 조건으로 지정한 칼럼 값을 변경하지 못하도록함
CHECK_VIEW 생성
CHECK_VIEW에서 DEPTNO가 30인 사람을 추가하면 뷰에서 선언한 조건에 맞지 않기 때문에 오류가 난다
- WITH READ ONLY
-> 뷰를 통해서는 어떤 테이블의 칼럼의 내용을 변경 할 수 없다
'DATABASE > SQL' 카테고리의 다른 글
[SQL] SUBQUERY (0) | 2018.04.20 |
---|---|
[SQL] JOIN (0) | 2018.04.20 |
[SQL] SCHEMA - 스키마 (0) | 2018.04.19 |
[SQL] 데이터 무결성 (1) | 2018.04.19 |
[SQL] TRANSACTION (0) | 2018.04.19 |