--view 파일 : 물리적인 테이블을 근거로 논리적인 가상 테이블을 만들어 사용 물리적으로 데이터를 포함하지도 않고, 공간을 차지하지도 않는다.
-- select 문의 조건을 파일로 만들어 테이블처럼 사용한다.
-- 사용 이유 - 긴 쿼리문 단순화, 보안 강화, 자료의 독립성 확보
-- 뷰를 생성하기 위해서는 권한이 필요하다
sqlplus / as sysdba
grant create view to scott;
형식)
create [or replace] view 뷰 파일명 as select문
drop view 뷰 파일명
--뷰 생성 예시
create table test1 as select * from sawon;
select * from test1;
--조건으로 뷰 생성
create view v_a as select sawon_no, sawon_name, sawon_pay from sawon where sawon_ibsail > '2000-1-1';
select * from v_a
drop view v_a;
create or replace view v_a as select sawon_no, sawon_name, sawon_pay from sawon where sawon_ibsail > '2000-1-1';
desc v_a;
create view v_b as select * from sawon where sawon_name > '김%' or sawon_name like '이%';
select * from v_b;
--뷰는 원본에 의존
rename spring to sawon;
-- rename sawon to spring;
select * from v_a; -- 원본테이블에 의존하므로 원본이름이 바뀌면 출력안댐
--뷰 생성
create view v_c as select * from sawon order by sawon_pay desc;
select * from v_c;
--뷰 생성시 계산컬럼
create view v_d as select sawon_no, sawon_name, sawon_pay * 10000 sawon_pay from sawon; -- 계산컬럼은 반드시 별명을 줘야한다.
--뷰를 뷰로 생성
create view v_e as select sawon_name, sawon_pay from v_d where sawon_pay > 30000000; -- view로 view를 만듬
select * from v_e;
--삽입
create view v_f as select sawon_no, sawon_name, buser_num from test1;
select * from v_f;
insert into v_f(sawon_no, sawon_name) values (50,'신기해'); -- 원본테이블인 test1을 갱신.
select * from v_f;
select * from test1;
--뷰 삽입 주의할점
create view v_h as select sawon_no, sawon_name, sawon_pay from test1 where sawon_pay >= 5000;
insert into v_h(sawon_no, sawon_name, sawon_pay) values(51,'손오공',6700);
insert into v_h(sawon_no, sawon_name, sawon_pay) values(52,'손오정',1200);
select * from v_h -- 손오공은 보이지만 손오정은 보이지 않는다. 해당 뷰의 조건에 주의해야한다. 실제로 test1테이블에 자료는 삽입된다.
--뷰 갱신 주의할점
create view v_i as select sawon_no, sawon_name, sawon_pay * 0.1 as tex from test1; -- 가상열 tex 만듬
select * from v_i;
update v_i set sawon_name='저팔계' where sawon_name='손오공';
update v_i set tex=600 where sawon_name='사오정'; -- 가상열은 수정할 수 없다.
delete from v_i where tex=222; --가상열을 조건으로 사용하여 삭제할 수 있다.
--group by로 만들어진 컬럼을 가진 뷰 주의할점
create view v_j as select sawon_jik, sum(sawon_pay) as tot, count(*) as inwon from test1 group by sawon_jik;
select * from v_j;
insert into v_j(sawon_jik,.tot,inwon) values('이상',8000,3); --x
update v_j set tot=8000 where sawon_jik='대리'; --x
delete from v_j where sawon_jik='과장'; --x
delete from test1 where sawon_jik is null --o null은 삭제 조건으로 가능
-- 계산 컬럼은 insert,delete,update 불가능
create view v_k as select sum(sawon_pay) as pay, count(*) as count from test1;
select * from v_k; -- select만 가능한 뷰가 되었다.
create view v_l as select distinct sawon_jik from test1;
select * from v_l; -- select만 가능한 뷰가 되었다.
'오라클' 카테고리의 다른 글
subquery 활용 (0) | 2014.03.05 |
---|---|
any와 all (0) | 2014.03.05 |
subquery (0) | 2014.03.05 |
여러가지 Join 예제 (0) | 2014.03.03 |
Join (0) | 2014.03.03 |