자바 웹 개발자가 될거야/DB

[Oracle] View 생성 및 삭제하기

whitz 2021. 12. 14. 16:41

- 테이블 다음으로 많이 사용하는 오브젝트로 뷰와 시퀀스가 있다

< 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;

  · 뷰 내용 조회