뷰(View)는 데이터베이스 개체 중 하나이다. 모든 데이터베이스 개체는 테이블과 관련이 있지만, 특히 뷰는 테이블과 아주 밀접하게 연관되어 있다. 뷰는 한 번 생성해 놓으면 테이블이라고 생각하고 사용해도 될 정도로 사용자들의 입장에서는 테이블과 거의 동일한 개체로 취급된다.
뷰는 테이블처럼 데이터를 가지고 있지는 않다. 뷰의 실체는 SELECT 문으로 만들어져 있기 때문에 뷰에 접근하는 순간 SELECT가 실행되고 그 결과가 화면에 출력되는 방식이다. 비유하자면 바탕 화면의 '바로 가기 아이콘'과 비슷하다.
뷰는 단순 뷰와 복합 뷰로 나뉘는데, 단순 뷰는 하나의 테이블과 연관된 뷰를 말하고, 복합 뷰는 2개 이상의 테이블과 연관된 뷰를 말한다.
뷰를 만드는 형식은 다음과 같다.
CREATE VIEW 뷰_이름
AS
SELECT 문;
뷰를 만든 후에 뷰에 접근하는 방식은 테이블과 동일하게 SELECT 문을 사용한다.
전체에 접근할 수도 있고, 필요하다면 조건식도 테이블과 동일하게 사용할 수 있다.
SELECT 열_이름 FROM 뷰_이름
[WHERE 조건];
뷰의 생성과 데이터 출력 예
CREATE VIEW v_member
AS
SELECT mem_id, mem_name, addr FROM member;
SELECT * FROM v_member;
WHERE 조건 추가
SELECT mem_name, addr FROM v_member
WHERE addr IN ('서울', '경기');
뷰를 사용해서 얻을 수 있는 장점은 여러 가지가 있다.
먼저 보안에 도움이 된다.
앞의 예에서 만든 v_member 뷰에는 사용자의 아이디, 이름, 주소만 있을 뿐 사용자의 중요한 개인정보인 연락처, 평균 키, 데뷔 일자 등의 정보는 들어 있지 않다.
다음으로 복잡한 SQL을 단순하게 만들 수 있다.
아래와 같은 쿼리 문을 자주 사용해야 한다면 매번 복잡한 쿼리를 직접 입력할 필요없이 뷰로 생성해 놓고 접근하면 된다.
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;
뷰로 생성한 후 접근
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;
SELECT * FROM v_memberbuy WHERE mem_name = '블랙핑크';
기본적인 뷰를 생성하면서 뷰에서 사용될 열 이름을 테이블과 다르게 지정할 수도 있다. 기존에 배운 별칭을 사용하면 되는데, 중간에 띄어쓰기 사용이 가능하다. 단 뷰를 조회할 때는 열 이름에 공백이 있으면 백틱(`)으로 묶어주어야 한다.
별칭은 열 이름 뒤에 작은 따옴표 또는 큰 따옴표로 묶어주고, 형식상 AS를 붙여준다.
CREATE VIEW v_viewtest1
AS
SELECT B.mem_id 'Member ID', M.mem_name AS 'Member Name', B.prod_name "Product Name",
CONCAT(M.phone1, M.phone2) AS "Office Phone"
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1; -- 백틱(`) 사용
ALTER VIEW 문을 활용한 예
ALTER VIEW v_viewtest1
AS
SELECT B.mem_id 'Member ID', M.mem_name AS 'Member Name', B.prod_name "Product Name",
CONCAT(M.phone1, M.phone2) AS "Office Phone"
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1; -- 백틱(`) 사용
뷰의 정보를 확인하기 위해서는 DESCRIBE 문을 사용한다.
참고로 뷰를 통해 테이블의 데이터 구성을 살펴볼 경우 기본 키(Primary Key)가 설정되어 있어도 표시되지 않는다.
CREATE OR REPLACE VIEW v_viewtest2
AS
SELECT mem_id, mem_name, addr FROM member;
DESCRIBE v_viewtest2;
뷰를 통한 데이터 수정
UPDATE v_member SET addr = '부산' WHERE mem_id = 'BLK';
SELECT * FROM v_member WHERE mem_id = 'BLK';
'📟 Database > 혼자 공부하는 SQL' 카테고리의 다른 글
[MySQL] 13. 인덱스의 내부 작동 원리와 구조, 인덱스에서 데이터 검색하기 (0) | 2022.04.09 |
---|---|
[MySQL] 12. 인덱스의 개념과 장단점, 클러스터형 인덱스와 보조 인덱스 (0) | 2022.04.09 |
[MySQL] 10. SQL 테이블 제약조건(기본키, 외래키, 고유키) (0) | 2022.04.09 |
[MySQL] 9. GUI 환경에서 테이블 생성하기, SQL로 테이블 만들기 (0) | 2022.04.08 |
[MySQL] 8. SQL 프로그래밍(IF문, CASE문, WHILE문, 동적SQL) (0) | 2022.04.07 |