5. 뷰(View) 생성, 삭제
(가) 뷰란 무엇인가?
뷰란? 데이터베이스내에 사용자에게는 column과 row로 구성된 테이블로 보이지만 "가상 테이블"로서 존재합니다.
뷰를 통해 볼 수 있는 데이터의 행과 열은 뷰을 정의한 SQL문에 의해 생성된 질의결과입니다.
(나) 뷰의 장점
·뷰는 사용자들이 필요에 따라 데이터베이스를 각기 다른 관점에서 볼 수 있도록 허용합니다.
·뷰는 사용자들이 테이블의 특정 열이나 행만을 볼 수 있도록 함으로써 사용자의 데이터 접근을 제한합니다.
·뷰는 각각의 사용자에 대해 관심있는 데이터만을 보여줌으로써 사용자의 데이터 접근을 단순화합니다.
(1)뷰 생성
뷰는 Simple 뷰와 Comple 뷰로 나눌 수 있습니다.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 뷰
[(aliss[, aaless]....)]
AS Subquery
[WITH CHECK OPTION [CONSTRAINT 제약조건]]
[WITH READ ONLY]
Simple 뷰 와 Comple 뷰의 비교
Simple 뷰 Comple 뷰
테이블의 수 하나 하나 이상
데이터 그룹 포함 가능 여부 가능 가능
뷰를 통한 DML 가능 불가능
회원종목코드가 102인 회원의 회원번호와 이름, 전화번호, 주소, 점수를 가지는 뷰를 만들고 내용을 display합니다.
SQL> create view membervu102
2 as select no, name, tel, addr, jumsu
3 from member
4 where code=102;
뷰가 생성되었습니다.
SQL> select * from membervu102;
NO NAME TEL ADDR JUMSU
------------------------------------------------------------
4 김희수 391-9192 대전시 가오동 300-050 44
15 이석준 383-3939 성남시 분당구 내정동 4-5 99
(2) 뷰의 수정
뷰의 정의를 수정하려면 CREATE OR REPLACE 절을 사용합니다.
membervu102를 회원번호, 이름, 전화번호, 코드 컬럼으로 구성되게 수정합니다.
SQL> create or replace view membervu102
2 as select no, name, tel, code
3 from member
4 where code=102;
뷰가 생성되었습니다.
SQL> select * from membervu102;
NO_NUMBER MY_NAME ZIP_TEL S_CODE
--------- ---------- --------------- ---------
4 김희수 391-9192 102
5 이석준 383-3939 102
이름와 최소 점수, 최고 점수, 평균 점수로 구성된 뷰를 만들고 뷰의 구조와 내용을 출력.
SQL> create view member_jumsu
2 (name, min_jumsu, max_jumsu, avg_jumsu)
3 as select d.name, min(e.jumsu), max(e.jumsu), avg(e.jumsu)
4 from member e, circle d
5 where e.code=d.code
6 group by d.name;
뷰가 생성되었습니다.
SQL> desc member_jumsu
이름 Null? 유형
------------------------------- -------- ----
NAME VARCHAR2(10)
MIN_JUMSU NUMBER
MAX_JUMSU NUMBER
AVG_JUMSU NUMBER
SQL> select * from member_jumsu;
NAME MIN_JUMSU MAX_JUMSU AVG_JUMSU
---------- --------- --------- ---------
볼링부 80 80 80
수영부 82 97 91.4
요리부 48 91 76.333333
탁구부 70 81 73.666667
테니스부 44 99 71.5
(3) 뷰에 대한 DML문 사용
·다름 중 어느 것도 포함하지 않는다면 뷰에서 행을 삭제할 수 있다.
(조인 조건, 그룹 함수, GROUP BY 절, DISTINCT 명령, 식으로 정의된 column, 예를들면, SALARY*12)
·위에 열거한 것 중 어느 것도 포함하지 않고 뷰에서 선택하지 않은 NOT NULL
column이 base table에 있지 않으면 뷰를 통해 데이터를 추가할 수 있습니다.
종목별부서 번호 103에 대해 member 테이블의 모든 column을 갖는 뷰를 만듭니다. with check option 절을 추가한다.
SQL> create or replace view member103
2 as select * from member
3 where code=103
4 with check option constraint member103_ck;
뷰가 생성되었습니다.
뷰를 통해 회원 103의 종목별 부서번호를 104로 바꾼다.
SQL> update member103
2 set code=104
3 where no=2;
0 행이 갱신되었습니다.
※ 종목 부서 번호가 104로 바뀌면 뷰는 더 이상 해당 사원을 볼 수 없기 때문에 퍼스날 오라클에서는 "0 행이 갱신되었습니다."라고 발생하고 서버용 오라클에서는 "ERROR at line 3:ORA-01402: View WITH CHECK OPTION where-clause violation"라고 error가 발생하게됩니다. 따라서 WITH CHECK OPTION 절을 써서 뷰는 단지 종목 부서 103의 회원만을 볼 수 있고 이 회원의 부서 번호는 뷰를 통해서는 변경할 수 없게 합니다
EMPVU102 뷰를 수정한다. 이 뷰에서 DML 연산이 수행되지 않도록 read only 옵션을 줍니다.
SQL> create or replace view membervu102
2 (no_number, my_name, zip_tel, zip_addr, s_code)
3 as select no, name, tel, addr,code
4 from member
5 where code=102
6 with read only;
뷰가 생성되었습니다.
SQL> delete from membervu102
2 where no_number=15;
delete from membervu102
*
1행에 오류:
ORA-01732: Data menipulation operation not legal on this view
(4)뷰 삭제
뷰를 삭제하려면 DROP VIEW 명령을 쓰십시오. 이 명령은 데이터베이스에서 뷰의 정의를 삭제합니다. 뷰를 삭제하는 것은 뷰가 기반으로 하고 있는 테이블에 영향을 주지 않습니다.
drop view 뷰이름;
SQL> drop view membervu102;
뷰가 삭제되었습니다.
|