본문 바로가기

데이터베이스

[SQL] 뷰 view

 

뷰는 다른 테이블을 기반으로 만들어진 가상 테이블이다.

뷰는 실제로 저장하는 일반 테이블과는 달리 논리적으로만 존재하기 때문이다.

뷰는 기본 테이블을 들여다볼 수 있는 창 역할을 한다.

따라서 데이터는 연결되어있으며, 뷰를 통해 기본 테이블의 내용을 쉽게 검색할 수는 있지만 기본 테이블의 내용을 바꾸는 작업은 제한적으로 이루어진다.

▶뷰의 생성

CREATE VIEW 뷰_이름[(속성_리스트)] AS SELECT[WITH CHECK OPTION];

CREATE VIEW 명령어와 함께 새로 생성할 뷰의 이름을 제시한 후, 뷰를 구성하는 속성의 이름을 괄호 안에 나열

그리고 AS 키워드와 함께 기본 테이블에 대한 SELECT 문(뷰의 정의)을 제시한다. ORDER BY를 사용할 수 없다.

WITH CHECK OPTION은 생성한 뷰에 삽입이나 수정 연산을 할 때 SELECT 문에서 제시한 뷰의 정의 조건을 위반하면 수행되지 않도록 하는 제약조건을 의미한다.

▶뷰의 활용

CREATE VIEW 문으로 생성된 뷰에서도 일반 테이블처럼 데이터 조작이 가능하다.

하지만 뷰는 기본테이블을 들여다보는 창의 역할을 하기 때문에 뷰를 통한 기본 테이블의 변화는 제한적이다.

변경이 불가능한 뷰

· 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰는 변경할 수 없다.

· 기본 테이블에 있던 내용이 아니라 집계 함수로 새로 계산된 내용을 포함하고 있는 뷰는 변경할 수 없다.

· DISTINCT 키워드를 포함하여 정의한 뷰는 변경할 수 없다.

· GROUP BY 절을 포함하여 정의한 뷰는 변경할 수 없다.

· 여러 개의 테이블을 조인하여 정의한 뷰는 변경할 수 없는 경우가 많다.

이러한 불편함 속에서도 뷰를 사용하는 이유는

· 질의문을 좀 더 쉽게 작성할 수 있다. - 특정 조건을 만족하는 뷰를 만들어 놓으면 WHERE절 없이 검색할 수 있다.

· 데이터의 보안 유지에 도움이 된다. - 사용자가 자신에게 제공된 뷰를 통해서만 데이터를 접근하도록 설정한다.

· 데이터를 좀 더 편리하게 관리가능하다. - 제공된 뷰와 관련이 없는 다른 테이블의 변화에도 영향을 받지 않는다.

▶뷰의 삭제

DROP VIEW 뷰_이름;

뷰를 삭제하더라도 기본 테이블은 영향을 받지 않는다.


키워드 연습 문제

1) 고객 테이블에서 등급이 vip인 고객의 고객 아이디, 고객 이름, 나이로 구성된 뷰를 우수고객이라는 이름으로 생성해보

자. 그런 다음 우수고객 뷰의 모든 내용을 검색해보자.

2) 제품 테이블에서 제조업체별 제품수로 구성된 뷰를 업체별제품수라는 이름으로 생성해보자. 그런 다음 업체별 제품수

뷰의 모든 내용을 검색해보자.

3) 우수고객 뷰에서 나이가 25세 이상인 고객에 대한 모든 내용을 검색해보자.

4) 우수고객 뷰를 삭제해보자.

 

ref. IT CookBook, 데이터베이스 개론(2판): 기초 개념부터 빅데이터까지 김연희