CREATE VIEW: 뷰 생성하기
CREATE VIEW 뷰이름 AS SELECT 쿼리문;
- 뷰 이름 앞에는 "v_"나 "view_" 같은 접두사를 붙여서 다른 테이블과 쉽게 구분할 수 있도록 하는 것이 실무에서 흔히 사용하는 좋은 습관이다.
create view v_category_order_status as
SELECT
p.category,
COUNT(*) AS total_orders,
SUM(CASE WHEN o.status = 'COMPLETED' THEN 1 ELSE 0 END) AS completed_count,
SUM(CASE WHEN o.status = 'SHIPPED' THEN 1 ELSE 0 END) AS shipped_count,
SUM(CASE WHEN o.status = 'PENDING' THEN 1 ELSE 0 END) AS pending_count
FROM
orders o
JOIN products p ON o.product_id = p.product_id
GROUP BY p.category;
- 이 쿼리를 실행하고 나면, 우리 데이터베이스에 "v_category_order_status"라는 새로운 객체가 생성된다.
- 이 뷰는 실제 데이터를 담고 있는 것이 아니라, 위 "SELECT" 쿼리문 자체를 품고 있는 것이다.
뷰 조회하기: SELECT
뷰를 그냥 하나의 테이블이라고 생각하고 "SELECT" 문을 사용하면 된다.
select *
from v_category_order_status
where category = '전자기기'
;

- 뷰 역시 테이블처럼 다룰 수 있으므로, "WHERE" 절이나 "ORDER BY"를 사용해서 뷰의 결과를 필터링하거나 정렬할 수도 있다.
ALTER VIEW: 뷰 수정하기
"CREATE VIEW"와 문법은 거의 동일하며, 기존 뷰의 정의를 새로운 "SELECT" 쿼리로 덮어쓴다.
alter view v_category_order_status as
SELECT
p.category,
SUM(p.price * o.quantity) AS total_sales, -- 매출액 컬럼 추가!
COUNT(*) AS total_orders,
SUM(CASE WHEN o.status = 'COMPLETED' THEN 1 ELSE 0 END) AS completed_count,
SUM(CASE WHEN o.status = 'SHIPPED' THEN 1 ELSE 0 END) AS shipped_count,
SUM(CASE WHEN o.status = 'PENDING' THEN 1 ELSE 0 END) AS pending_count
FROM
orders o
JOIN products p ON o.product_id = p.product_id
GROUP BY p.category;
-- 바뀐 결과 조회
select *
from v_category_order_status;

- "total_sales"라는 새로운 컬럼이 성공적으로 추가된 것을 확인할 수 있다.
- 뷰를 사용하는 모든 팀은 이제 별도의 수정 없이 이 새로운 보고서를 즉시 받아볼 수 있게 된다.
DROP VIEW: 뷰 삭제하기
더 이상 사용하지 않는 뷰는 "DROP VIEW" 명령어로 간단하게 삭제할 수 있다.
DROP VIEW v_category_order_status;
- 뷰를 삭제해도 원본 테이블인 "orders"와 "products"의 데이터는 단 하나도 손상되거나 변경되지 않는다
'데이터 베이스 > 데이터베이스 기본' 카테고리의 다른 글
| Ch07. 인덱스 - 인덱스가 필요한 이유 (0) | 2026.06.04 |
|---|---|
| Ch06. 뷰 - 뷰의 장점과 단점 (0) | 2026.06.03 |
| Ch06. 뷰 - 뷰(View)란? (0) | 2026.06.03 |
| Ch05. CASE문 - 조건부 집계 (0) | 2026.06.02 |
| Ch05. CASE문 - 그룹핑 (0) | 2026.06.02 |