데이터베이스 뷰(View)란?
DB에서 뷰는 하나 또는 그 이상의 테이블을 조인하여 만든 새로운 가상 테이블을 의미한다. 실제로 테이블을 생성한 건 아니지만, 사용자에게는 실존 테이블과 동일하게 사용된다. (뷰를 가지고 새로운 뷰를 만들 수도 있다.) 이는 주로 특정 정보만 제공하고 싶은 경우나 복잡한 쿼리를 가상 테이블로 만들어 간편하게 활용할 수 있어 업무에서도 자주 이용하는 기능이다.
예를 들어 자세히 설명하자면,
두 개의 테이블이 있다고 가정하자. memberInfo, PaymentHist.
개발자가 회원 별 결제 이력을 조회하고 싶은데, DBA가 회사 규정상 민감한 개인정보는 제공하고 싶지 않은 경우 뷰를 만들어서 제공하면 된다. 테이블 memberInfo에 있는 민감한 개인정보가 담긴 컬럼을 제외하고 PaymentHist에도 카드 번호를 제외한 컬럼만 조인해서 뷰를 만들고 개발자에겐 해당 뷰를 접근시키면 된다.
이를 정리하자면 다음과 같다.
- 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블이다.
- 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.
- 뷰는 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용된다.
- 뷰는 조인문의 사용 최소화로 사용상의 편의성을 최대화 한다.
create view 뷰명 as select문~
alter view 뷰명 as select문~ with check option
※ 참고
뷰를 호출하는 순간에 뷰 create문안에 써있는 select문이 실행되는 것이다.
뷰(View)의 특징
- 뷰는 기본 테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같다.
- 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
- 데이터의 논리적 독립성을 제공할 수 있다.
- 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.
- 뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호하는 효율적인 기법으로 사용할 수 있다.
- 기본 테이블의 기본키를 포함한 속성(열) 집합으로 뷰를 구성해야지만 삽입, 삭제, 갱신, 연산이 가능하다.
- 일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
- 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.
- 집계함수가 들어가느 뷰는 수정 불가능하다.
- with check option을 주면 체크조건이 들어가게 됩니다.
뷰(View) 사용시 장-단점
장점
- 논리적 데이터 독립성을 제공한다.
- 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원해 준다. 즉, 특정 사용자에게 테이블 전체가 아닌 필요한 필드만을 보여줄 수 있다.
- 복잡한 쿼리를 단순화해서 사용할 수 있다.
- 쿼리를 재사용할 수 있다.
- 사용자의 데이터 관리를 간단하게 해준다.
- 접근 제어를 통한 자동 보안이 제공된다.
단점
- 독립적인 인덱스를 가질 수 없다.
- ALTER VIEW문을 사용할 수 없다. 즉, 한번 정의한 뷰는 변경할 수 없다.
- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 따른다.
복합 뷰
- inner join한 select문~
- 데이터 입력 불가능
CREATE VIEW v_userbuyTbl AS
SELECT
U.userID,
U.name,
B.prodName,
U.addr,
CONCAT(U.mobile1, U.mobile2) AS mobile
FROM
userTbl U
INNER JOIN buyTbl B ON U.userID = B.userID;
뷰 생성
CREATE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건
뷰의 이름을 명시하고, AS 키워드 다음에 SELECT 문을 사용하여 해당 뷰가 접근할 수 있는 필드를 명시한다.
이때 WHERE 절을 사용하여 특정 조건을 설정할 수도 있다.
이렇게 CREATE VIEW 문은 SELECT 문에서 선택된 필드를 가지는 새로운 뷰를 생성한다.
※ 참고
뷰는 원본 테이블과 같은 이름을 가질 수 없다.
※ join한 테이블을 뷰를 생성할 때 필드명이 겹치면 안됨
뷰 대체
CREATE 문에 OR REPLACE 절을 추가하여 기존에 존재하는 뷰를 새로운 뷰로 대체할 수 있다.
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건
CREATE OR REPLACE VIEW 문은 OR REPLACE 절이 추가된 것을 제외하면, 뷰를 생성하는 문법과 완전히 같다.
이때 해당 뷰가 존재하지 않으면 CREATE VIEW 문과 같은 결과를 반환한다.
뷰 수정
ALTER VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
뷰 삭제
DROP VIEW 뷰이름
참고