[Oracle] 오라클 #17, 뷰(view) 예제 및 응용
- Database/Oracle
- 2019. 3. 5. 23:27
뷰, View
- DB Object 중 하나(테이블, 시퀀스, 뷰)
- 가상 테이블
- 진짜 테이블의 복사본 -> 복사 테이블, 뷰 테이블, 가상 테이블..
- 테이블처럼 취급하는 객체(***)
뷰 관리
1. create
2. drop
뷰생성
create view vwInsa --머리
as --목
select * from tblInsa; --몸통(*****)
복사 테이블 생성
create table copyInsa
as
select * from tblInsa;
뷰사용
from 절에서 일반 테이블과 똑같이 쓸 수 있다
select * from vwInsa;
select * from copyInsa;
이렇게 where 절로 조건도 달아서 원하는 데이터도 뽑아낼 수 있다.
select * from vwInsa where buseo = '기획부';
select * from copyInsa where buseo = '기획부';
뷰의 특징
1. 자주 반복하는 쿼리를 간단하게 줄일 수 있다.
2. 복사
a. 복사 테이블 : 원본 테이블의 깊은 복사. 완전 복사본 만들어서 분리시킨다. 원본 테이블 수정 > 복사 테이블 반영 X
b. 뷰 : 원본 테이블의 얕은 복사. 뷰는 데이터 저장 객체가 아닌 SQL 저장 객체. 원본 테이블 수정 > 뷰 반영 O
3. 뷰는 주로 원본 테이블과는 독립적으로 업무에 필요한 임시 테이블이 필요할 때 만들어서 사용한다.
4. 사용 형태
a. 자주 반복되는 질의를 저장
b. 반복과 상관없이 해당 질의에 의미를 부여해서 가독성을 높이고 싶을 때
c. 보안 : 권한 중 하나 > 자원(테이블,뷰)에 대한 접근 권한
(이런 전체 직원데이터가 있을때)
select * from tblInsa;
(나는 기획부만 보고싶어)
select * from tblInsa where buseo = '기획부';
그걸 뷰로 이렇게 만들어서
create view 기획부
as
select * from tblInsa where buseo = '기획부';
필요할때 기획부만 조회하면 된다!!
select * from 기획부;
전체 직원 목록
select * from tblInsa;
부장 목록
select * from tblInsa where jikwi = '부장';
부장뷰 생성
create view vw부장
as
select * from tblInsa where jikwi = '부장';
부장들만 쏙
select * from vw부장;
뷰 수정
- DB Object 수정하는 명령어 > alter
- 뷰는 다른방법을 사용 or replace
- 즉 뷰를 만들때 create or replace는 뷰를 생성하거나 대체한다(변경한다) 라는 의미로 생성하던 대체하던 내가지금 컴파일하는 뷰를 이 이름의 뷰로 만들겠다는 의미.
당신이 컴파일을 하는 지금 이 쿼리는 vwComplete이라는 뷰를 만들건데 이건 create이던지 replace던지 나는 앞으로 이 뷰를 vwComplete에 담아서 호출할거야. 라는 뜻
create or replace view vwComplete
as
select title, completedate from tblTodo where completeDate is not null;
뷰삭제
drop view vwComplete;
****뷰는 읽기전용이다. 뷰는 읽기전용으로만 사용해야 한다.
select * from tblTodo;
--할일 추가하기
insert into tblTodo(seq, title, adddate,completedate) values (21,'오라클공부하기',sysdate,null);
create or replace view vwTodo
as
select title,completedate from tblTodo;
--읽기
select * from vwTodo;
--쓰기
insert into vwTodo(seq, title, adddate,completedate) values (22,'오라클공부하기',sysdate,null); --ORA-00904: "ADDDATE": invalid identifier
insert into vwTodo(title, completedate) values ('뷰공부하기',null); --ORA-01400: cannot insert NULL into ("HR"."TBLTODO"."SEQ")
--수정하기
update vwTodo set title = 'view 공부하기' where seq=21;
--삭제하기
delete from vwTodo where seq=22;
--뷰 사용시 DML 적용할일이 생긴다면?? -> 테이블을 사용한다.
--뷰는 읽기전용으로만 사용한다.
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 #19, 의사컬럼(ROWNUM) 사용법 (2) | 2019.03.09 |
---|---|
[Oracle] 오라클 #18, Alter 테이블 구조 변경 (2) | 2019.03.07 |
[Oracle] 오라클 #16, 조인(join) 개념과 종류, 예제 및 응용 (1) | 2019.03.04 |
[Oracle] 오라클 #15, 서브쿼리에 대해서(예제 및 응용) (0) | 2019.03.03 |
[Oracle] 오라클 #14, group by, having 절(그룹) (0) | 2019.03.03 |