코딩기록
Day - 35 [Maria DB] View 본문
View
- 뷰는 하나의 가상 테이블이라 생각 하면 된다.
- 뷰는 복잡한 Query 를 통해 얻을 수 있는 결과를 간단한 Query 로 얻을 수 있게 한다.
- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.

VIEW : 여러 테이블의 데이터를 모아서 만든 가상 테이블이다.
- 복잡한 조인이나 서브쿼리를 이용한 데이터를 뷰로 만들어두면 다음 사람이 편리하게 사용 할 수 있다.
- 자신만의 인덱스를 가질 수 없다.
-- 1) 뷰 생성 문법
-- CREATE [OR REPLACE] VIEW [view name] AS [query];
-- OR REPLACE : 기존 뷰를 수정 할 때 사용
create view vw_name as
select e.ename ,d.deptname from emp e join dept d on e.deptno = d.deptno;
-- 2) 뷰 사용(일반 테이블과 똑같다.)
select * from vw_name;
-- 뷰는 수정 가능?
-- 뷰에서 수정하면 해당 원본 테이블의 데이터도 수정 된다.
update vw_name set ename = 'oh' where ename = 'kim';
select * from emp;
-- 왜 kim 이 모두 oh 가 되지 않았나?
-- 등가조인에 의해서 뷰를 생성 할 때 deptno 6번인 kim 은 해당되지 않았기 때문에
-- 3) 뷰 수정(ALTER 를 이용 해도 된다.)
-- CREATE [OR REPLACE] VIEW [view name] AS [query];
-- create or replace : 만약 해당 뷰가 있으면 수정 , 없으면 생성
create or replace view vw_name as
select e.ename ,d.deptname,d.loc from emp e join dept d on e.deptno = d.deptno;
select * from vw_name;
-- 4) with check opton : 뷰를 생성한 조건식/을 만족하는 컬럼/은 update 할 수 없도록 하는 옵션
-- 절대 흔들려서는 안되는 값이야 할때 걸어준다.
create view vw_chk as
select ename,job,deptno from emp where deptno = 1 with check option;
select * from vw_chk;
-- job 수정
update vw_chk set job = 'manager' where ename = 'lee';
-- deptno 수정 : CHECK OPTION failed
-- 만약 with check option 이 없었다면 deptno 가 2로 변경되면 'lee' 는 뷰에서 빠졌을 것이다.
update vw_chk set deptno = 2 where ename = 'lee';
-- 생성된 뷰 정보 조회
show full tables where table_type like 'VIEW'; -- 내가 만든 뷰가 얼마나 있나
show create view vw_name; -- 특정 뷰에 대한 정보(뷰를 생성한 커리문)
-- 뷰 삭제
drop view vw_name;
drop view vw_chk;'study' 카테고리의 다른 글
| Day - 43 [Spring] 08_photoBoard (0) | 2023.04.04 |
|---|---|
| Day - 39,40 [SPRING] 설정 (0) | 2023.03.30 |
| Day - 35 [Maria DB] IN _ EXISTS _ ANY _ ALL (0) | 2023.03.22 |
| Day - 35 [Maria DB] SET(집합) (0) | 2023.03.22 |
| Day - 35 [Maria DB] JOIN (0) | 2023.03.22 |