지극히 개인적인 공부 노트/데이터베이스(Database)

[SQL] 뷰(VIEW) 간단 정리

AS J 2021. 9. 28. 12:55

SQL에서 뷰(VIEW)란, 다른 테이블에서 파생된 테이블을 의미한다. 하지만 물리적으로 데이터가 저장되는 것이 아니라 논리적으로만 존재하며, 뷰를 사용한 질의 시에는 DBMS(DB 관리 시스템, DB 관리자)에서 뷰의 정의를 잘 파악하고 필요시 재작성하여 수행해야 한다.

 

1. 뷰의 장점

뷰는 SQL에서 아래와 같은 장점을 가진다.

1) 독립성: 테이블 구조가 변경되어도 뷰에서 조회하는 컬럼이나 컬럼명, 테이블명 등이 그대로라면, 뷰를 사용하고 있는 응용 프로그램은 변경하지 않아도 된다.

2) 편리성: 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해두면, 추후 쿼리는 간단한 형태로 표현, 조회 등이 가능하다.

3) 보안성: 사용자의 권한에 따라 열람 가능한 데이터를 다르게 할 수 있다. 권한에 따라 확인 가능한 컬럼을 정의하여 뷰를 생성하면, 기본 테이블 모든 정보 노출 없이 접근 제어를 할 수 있다.

⇒ 여러 테이블에서 필요한 정보만을 조회하고 제공하기 위한 가상의 테이블. 일종의 함수라고 생각할 수 있다.

 

2. 뷰의 특징

1) 생성된 뷰는 또 다른 뷰를 생성하는데 사용될 수 있다.

2) 뷰의 정의는 변경할 수 없으며, 수정을 원한다면 삭제 후 재생성을 해야 한다.

3) 뷰를 통한 갱신에는 제약이 따른다. 갱신을 위해서는 기본적으로 원천 테이블의 기본키가 포함되어야 한다.

4) 원천이 되는 테이블이나 뷰가 삭제되면 이를 기반으로 하는 뷰도 함께 삭제된다.

 

뷰 생성 또는 대체, CREATE 또는 REPLACE

아래와 같이 CREATE를 통해 뷰를 생성할 수 있다. 만약 이미 존재하는 뷰를 대체하여 새로운 뷰로 재작성하고 싶다면 CREATE 대신 REPLACE를 사용하면 된다.

CREATE(또는 REPLACE) VIEW (뷰 이름) AS  -- CREATE 대신 REPLACE를 사용하면 같은 이름의 기존 뷰를 무시하고 대체
(
SELECT COL1, COL2, ...
FROM (테이블명)
WHERE (조건)  -- WHERE, JOIN 등 테이블을 조회하는 방식, 조건 등을 일종의 함수처럼 정의하면 됨.
);

-- 위처럼 한 번 생성해두면, 아래처럼 조회 가능
SELECT * FROM (뷰 이름);

 

여러 테이블에서 뷰 생성

아래와 같이 FROM에 여러 테이블을 나열함으로써 여러 테이블에서 한 번에 뷰를 생성할 수 있다. 단, 컬럼명이 겹친다면 각 테이블의 별칭을 통해 어떤 테이블의 어떤 컬럼인지 명시해주어야 한다.

CREATE VIEW (생성할 뷰 이름) AS
(
SELECT COL1, COL2, ...
FROM (테이블1), (테이블2), ...
(WHERE, JOIN 등 사용 가능)
);

 

뷰 삭제, DROP

아래와 같이 뷰를 삭제할 수 있는데, 뷰는 가상의 테이블이기 때문에 삭제하더라도 원본 테이블에는 영향이 없다. 단, 일회성 또는 쓸모가 별로 없는 가상의 테이블인 경우엔 쓰고 바로 삭제해주는 것이 추후 다른 테이블이나 뷰 생성 시 충돌을 피할 수 있기 때문에 좋다.

DROP VIEW (삭제할 뷰 이름);