VIEW
뷰는 여러 테이블을 모아서 만든 가상의 테이블이다.
복잡한 조인이나 서브쿼리를 이용해 한번 만들어 두면, 이후 사용자들은 편리하게 사용할 수 있다.
뷰는 자신만의 인덱스를 가질 수 없다.
1) 뷰 생성 문법
-- CREATE [OR REPLACE] VIEW [view name] AS [sub query]
-- or replace : 중복되는 이름이 있을 경우 뷰를 덮어 쓴다
-- 서브쿼리 내용을 변경하고 싶을 때 주로 사용
create view vw_emp as
select e.ename, d.deptname from emp e, dept d where e.deptno = d.deptno;
-- 이제 복잡한 서브쿼리 없이 데이터를 확인할 수 있다
select * from vw_emp;
2) 뷰에서 보이는 데이터를 수정하면 원본도 같이 수정됨
select * from vw_emp v;
-- kim 을 oh 로 수정하기
update vw_emp set ename = 'oh' where ename = 'kim';
select * from emp;
4) 뷰의 수정(서브쿼리 변경) - ALTER TABLE 로도 수정 가능? YES
-- or replace 는 수정 및 생성까지 가능
create or replace view vw_emp as
select e.ename, d.deptname, d.loc from emp e
join dept d on e.deptno = d.deptno;
5) 뷰 정보 확인
show create view vw_emp; -- 뷰의 구성 쿼리를 확인 가능
show full tables where table_type = 'VIEW'; -- 모든 뷰를 확인할 수 있음(항목만 가능)
6) with check option : 뷰를 생성하는 조건식을 만족하는 컬럼은 update 할 수 없도록 하는 옵션
create or replace view vw_chk as
select ename, job, hiredate, deptno from emp where deptno = 1;
-- with check option 이 없으면 뷰를 구성하는 기준 컬럼인 deptno 의 수정이 가능해진다
-- 이로 인해 데이터의 수정 발생시 뷰의 갯수가 달라지게 된다
update vw_chk set deptno = 2 where ename = 'lee';
create or replace view vw_chk as
select ename, job, hiredate, deptno from emp where deptno = 1 with check option;
-- CHECK OPTION failed `mydb`.`vw_chk`
update vw_chk set deptno = 2 where ename = 'oh';
7) 뷰 삭제
show full tables where table_type = 'VIEW';
drop view vw_emp;
drop view vw_chk;
'개발 > DB(MariaDB)' 카테고리의 다른 글
13. DB - (LIMIT) (0) | 2025.03.18 |
---|---|
12. DB - (auto_increment) (0) | 2025.03.18 |
10. DB - (INDEX) (0) | 2025.03.17 |
9. DB - (EXISTS, ANY, ALL) (0) | 2025.03.17 |
8. DB - (JOIN) (0) | 2025.03.17 |