[Oracle] View 생성 및 삭제하기
- 테이블 다음으로 많이 사용하는 오브젝트로 뷰와 시퀀스가 있다
< View >
- 하나 이상의 베이스 테이블을 기반으로 생성은 되었으나, 물리적으로 존재하지 않는다
- Data Dictionary에 SELECT 구문 형태로 정의만 되어 있는 가상의 논리적인 테이블
- view 혼자만 존재할 수 없음 (뷰와 테이블이 연동돼서 돌아감)
- 겉모습은 테이블과 똑같이 생겼다
- 데이터 중복 저장되어 공간 낭비되는걸 줄이기 위함
- 보안성 좋음
① 뷰 생성하기
- 복사본 테이블 만드는 문법이랑 같음 ( TABLE을 VIEW로 바꿔주기만 하면됨 )
- DDL
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 뷰명
AS 서브쿼리;
- OR REPLACE
· view를 수정하기 위함
· create or replace view : view가 없으면 생성하고 있으면 교체해달라는 의미
- FORCE / NOFORCE
· default는 NOFORCE
· NOFORCE : 서브쿼리 안의 base table이 존재하는 경우에만 view 생성
· FORCE : 서브쿼리 안의 base table 존재 여부와 상관없이 view 생성
- 단순 view ( 하나의 base table 기반 )
CREATE VIEW empv80
AS SELECT employee_id, last_name, salary
FROM employees WHERE department_id = 80;
CREATE VIEW salv50
AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY
FROM employees WHERE department_id = 50;
CREATE OR REPLACE VIEW empv80 (id_number, name, sal, department_id)
AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id
FROM employees WHERE department_id = 80;
- alias 속성을 이용하여 뷰의 컬럼명을 사용자가 지정가능
- 복합 view ( 2개 이상 base table 기반 )
CREATE VIEW dept_sum_v (name, minsal, maxsal, avgsal)
AS SELECT d.department_name, MIN(e.salary), MAX(e.salary), AVG(e.salary)
FROM employee e JOIN department d
ON (e.department_id = d.department_id)
GROUP BY d.department_name;
② 뷰 삭제하기
- 뷰를 삭제해도 base table에 영향을 주는건 아님
- DDL
DROP VIEW empv80;
③ 뷰 사용하기
- 테이블과 사용하는 것이 동일함
- 뷰를 통한 insert, update, delete 가능
· base table의 data가 조작되어짐
desc dept_sum_v
· 뷰 구조확인
SELECT * FROM dept_sum_v;
· 뷰 내용 조회