[14일차-1] 뷰

2026. 6. 9. 23:28KDT/2. MySQL

#뷰 View

  • select 문을 저장해둔 가상의 테이블 (자주 사용하는 select 문 결과를 편하게 사용하기 위함)
  • 뷰를 사용하는 이유
    1. 복잡한 SQL 단순화
    2. 재사용 (자주 쓰는 조회 저장)
    3. 가독성 (SQL을 보기 쉽게 구성)
    4. 보안 (특정 컬럼만 공개)
  • 데이터를 직접 저장하지 않음 (원본 테이블의 select 결과를 보여주는 가상 테이블. 실제 테이블 x)
    ex. member 테이블 데이터를 변경하면 -> view의 결과도 같이 변경

1. 뷰 생성

create view 뷰이름  as select문
-- member 테이블에서 포인트가 100 이상인 userid, name, point를
-- vip_member로 view 생성
create view vip_member as
select userid, name, point from member where point >= 100;

 

2. 뷰 사용

-- vip_member 뷰 사용
select * from vip_member;
select * from vip_member where point >= 150;
-- 회원주소 뷰(member_address) 조회
-- userid, name, address1 + address2 + addres3 as address
create view member_address as 
select userid, name, concat(address1, ' ', address2, ' ', address3) as address from member;

-- 생성한 뷰 확인
select * from member_address;

 

3. 뷰 수정

  • 뷰를 수정하기 위해서는 create on replace로 덮어 씌워야 한다
-- vip_member 뷰에 email을 포함해서 조회
create on replace view vip_member as
select userid, name, point, email from member where point >= 100;

-- 수정한 뷰 확인
select * from vip_member;

 

4. 뷰 구조 확인

show create view 뷰이름;
-- vip_member 뷰의 구조 확인
show create view vip_member;

 

5. 뷰 목록 확인

  • 생성되어 있는 뷰 목록을 확인할 수 있다
SHOW FULL TABLES WHERE Table_type = 'VIEW';

 

6. join을 사용한 뷰 생성

-- member 테이블의 idx와 orders 테이블의 member_idx가 같은 것으로 두 테이블을 조인해서
-- userid, name, product_name, price, order_date를 조회하는 뷰 생성 (member_order)
create view member_order as
select m.userid, m.name, o.product_name, o.price, o.order_date from member as m
join orders as o on m.idx = o.member_idx;

-- 생성한 뷰 확인
select * from member_order;