📒 요약 : 뷰는 '가상의 테이블'이라고 부른다. 실제로 테이블이 만들어지는 것은 아니지만, 사용자가 필요한 내용만 보이도록 만드는 데이터베이스 개체이다. 단순 뷰는 하나의 테이블과 연관된 뷰를 말하고, 복합 뷰는 2개 이상의 테이블과 연관된 뷰를 말한다.
어떤 테이블을 조회할 때, SELECT 문으로 조회하고 싶은 열을 선택하여 불러온다. 이 때 출력된 결과는 결국 테이블의 모양을 가지고 있는데, 이렇게 SELECT 문으로 만들어진 테이블 모양의 개체가 바로 '뷰'이다. 실제로 테이블이 있는 것은 아니지만 테이블이 있는 것 처럼 생각하는 것이다. 이러한 뷰를 만드는 형식은 아래와 같다.
CREATE VIEW 뷰 이름
AS
SELECT 문;
뷰를 만든 후에 접근하는 방식은 테이블과 동일하게 SELECT 문을 사용하는 것이다. 한 번 만들어진 뷰의 전체 정보에 접근할 수도 있고, 필요한 열만 골라서 접근할 수도 있다.
SELECT 열_이름 FROM 뷰_이름
[WHERE 조건];
예를 들어, 아래와 같이 뷰를 만들고, 뷰에 접근하여 정보를 조회할 수 있다.
USE market_db;
#뷰 생성하기
CREATE VIEW v_member
AS
SELECT mem_id, mem_name, addr FROM member;
#뷰 조회하기
SELECT * FROM v_member;
#뷰에서 필요한 정모만 조회하기
SELECT mem_name, addr FROM v_member
WHERE addr IN ('서울', '경기');
그림1. 생성된 뷰의 전체 정보 조회하기
그림2. 뷰에서 필요한 정보만 조회하기
이렇게 생성된 뷰는 기본적으로 '읽기 전용'으로 사용되지만, 몇 가지 조건을 만족할 경우 뷰를 통해서 원본 테이블의 데이터를 수정할 수도 있다.
뷰는 아래와 같은 장점이 있다.
- 보안에 도움이 된다.
- 복잡한 SQL을 단순하게 만들 수 있다.
데이터베이스도 사용자마자 테이블에 접근하는 권한에 차별을 둬서 관리하는데, 권한이 없는 사용자가 테이블의 중요한 정보에 접근하는 것을 방지하기 위하여 미리 만들어 둔 뷰에만 접근 권한을 부여하여 보안을 지킬 수 있다. 또한, 만약 한 쿼리를 자주 사용해야 할 경우 사용자는 매번 똑같은 SQL문을 입력해야 하는데, 뷰를 사용할 경우 해당 뷰에 접근ㄴ하여 길고 복잡한 SQL문을 입력할 필요 없이 편하게 정보를 조회할 수 있다.
이번에는 뷰가 실제로 어떻게 활용되는지 살펴보자.
뷰를 생성하면서 뷰에서 사용될 열의 이름을 테이블과 다르게 지정할 수 있는데, 이 이름을 '별칭'이라고 부른다. 별칭에는 띄어쓰기를 사용할 수 있다. 별칭을 지정할 때에는 열 이름 뒤에 '' 혹은 ""로 묶어주고, 형식상 AS를 붙여준다. 단, 뷰를 조회할 때에는 열 이름에 공백이 있으면 백틱(`)으로 묶어줘야 한다.
CREATE VIEW v_memberbuy
AS
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr,
CONCAT(M.phone1, M.phone2) '연락처'
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
뷰는 아래와 같으 ALTER VIEW 구문을 사용하여 수정하고, DROP VIEW로 삭제할 수 있다. 전반적으로 테이블을 다루는 것과 비슷하다고 생각하면 된다.
#뷰 수정하기
ALTER VIEW v_viewtest1
AS
SELECT B.mem_id '회원 아이디', M.mem_name AS '회원 이름',
B.prod_name "제품 이름",
CONCAT(M.phone1, M.phone2) AS "연락처"
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
#뷰 삭제하기
DROP VIEW v_viewtest1;
이미 만들어진 테이블을 수정하여 제약조건을 설정하는 것도 가능하다. 테이블의 정보를 수정할 때에는 ALTER TABLE 구문을 사용한다.
ALTER TABLE member
ADD CONSTRAINT
PRIMARY KEY (mem_id);
기존에 생성된 뷰에 대한 정보를 확인할 때에는 DESCRIBE 구문을 이용한다. 테이블과 동일하게 정보를 보여주는데, PRIMARY KEY 등의 정보는 확인되지 않는다.
SHOW CREATE VIEW 구문으로 뷰의 소스 코드를 확인할 수 있으니 참고해두자.
뷰를 통해서 데이터를 수정할 수도 있다. 다음과 같이 UPDATE문을 이용한다.
UPDATE v_member SET addr = '부산' WHERE mem_id='BLK' ;
테이블에서와 마찬가지로 INSERT 구문으로 뷰에 데이터를 입력할 수 있다.
INSERT INTO v_member(mem_id, mem_name, addr) VALUES('BTS','방탄소년단','경기') ;
뷰가 참조하는 테이블을 삭제한 뒤, 해당 테이블을 참조하는 뷰를 조회할 경우 에러가 발생한다. 원본 테이블이 없기 때문에 당연히 발생하는 오류이다. 이렇게 뷰가 조회되지 않으면 CHECK TABLE 문으로 뷰의 상태를 확인할 수 있다.
CHECK TABLE v_height167;
하나의 테이블로 만든 뷰를 단순 뷰라고 하고, 두 개 이상의 테이블로 만든 뷰를 복합 뷰라고 한다. 복합 뷰는 주로 두 테이블을 조인한 결과를 뷰로 만들 때 사용한다. 복합 뷰는 읽기 전용으로, 복합 뷰를 통해 테이블에 데이터를 입력하거나, 수정 및 삭제할 수 없다. 아래의 간단한 뷰는 복합 뷰의 예시이다.
CREATE VIEW v_complex
AS
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;