SQL - 뷰(View)란?
SQL - 뷰(View)란?
뷰(View)란?
- 가상의 테이블을 의미함.
- 실제 데이터를 저장하지 않고, 미리 정의된
SELECT쿼리를 저장해두는 개념임. - 기본적으로 조회용 테이블로 사용됨.
구문
1
CREATE VIEW view_name AS SELECT ...
예시
1
2
3
4
5
6
7
CREATE VIEW v_notifications_send_status AS
SELECT
COUNT(*) AS total_send,
SUM(CASE WHEN status = 'COMPLETED' THEN 1 ELSE 0 END) AS completed_count,
SUM(CASE WHEN status = 'PROGRESS' THEN 1 ELSE 0 END) AS progress_count,
SUM(CASE WHEN status = 'PENDING' THEN 1 ELSE 0 END) AS pending_count
FROM notifications;
일반적으로 뷰이름에는
v_또는view_같은 접두사를 붙여서 구분함.
뷰의 동작 원리
- 사용자가
SELECT쿼리를 실행함. - DB는 실제 테이블을 찾는 대신 뷰(view)에 정의된 원래의 긴
SELECT쿼리문을 찾아냄. - DB는 저장된
SELECT쿼리문을 실행함. - 실행 결과가 사용자에게 반환됨.
뷰는 데이터를 저장하지 않고 뷰를 조회할 때마다 항상 최신 상태의 원본 테이블을 기준으로 쿼리가 실행되기 때문에 뷰의 데이터는 항상 최신 상태를 유지함.
뷰 수정
ALTER를 사용해 기존 뷰를 수정할 수 있음.
구문
1
ALTER VIEW view_name AS SELECT ...
예시
1
2
3
4
5
6
ALTER VIEW v_notifications_send_status AS
SELECT
SUM(CASE WHEN status = 'COMPLETED' THEN 1 ELSE 0 END) AS completed_count,
SUM(CASE WHEN status = 'PROGRESS' THEN 1 ELSE 0 END) AS progress_count,
SUM(CASE WHEN status = 'PENDING' THEN 1 ELSE 0 END) AS pending_count
FROM notifications;
뷰 제거
DROP을 사용해 뷰를 제거할 수 있음.
구문
1
DROP VIEW view_name;
예시
1
DROP VIEW v_notifications_send_status;
뷰의 장/단점
장점
- 편리성과 재사용성: 복잡한
SELECT쿼리를 뷰 뒤에 감춰둘 수 있음. - 보안성: 데이터베이스에 대한 섬세한 권한 제어가 가능함.
- 추상화: 뷰는 추상화 되어있기 때문에 조회하는 입장에서는 뷰를 구성하는
SELECT쿼리가 변경되더라도 상관 없이 동일한 조회 쿼리를 유지할 수 있음.
단점
- 성능 문제: 뷰는 실행 시마다 원본 테이블을 조회하기 때문에, 복잡한 뷰를 중첩하거나 대용량 데이터에 사용하면 실행 속도가 크게 느려질 수 있음.
- 관리 복잡성: 여러 뷰가 서로를 참조할 경우, 구조 변경 시 수정 범위가 넓어질 수 있음.
This post is licensed under CC BY 4.0 by the author.