데이터 베이스/데이터베이스 기본

Ch06. 뷰 - 생성, 조회, 수정, 삭제

webmaster 2026. 6. 3. 12:02

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"의 데이터는 단 하나도 손상되거나 변경되지 않는다