*SQL_Oracle*

OBJECT < VIEW >

깐부로부터 2021. 11. 11. 21:25

VIEW 뷰

 

SELECT(쿼리문)을 저장해둘 수 있는 객체
(자주 쓰는 긴 SELECT문을 저장해두면 긴 SELECT문을 매번 다시 기술 할 필요가 없음)

임시테이블(실제 데이터가 들어가는것은 아니다)  

 

1. VIEW 생성방법
   

[ 표현법 ]
 

- CREATE VIEW 뷰명 
    AS 서브쿼리;
    
- CREATE OR REPLACE VIEW 뷰명
   AS 서브 쿼리; -> OR REPLACE는 생략이 가능하다.
                          뷰 생성 시 기존에 중복된 이름이 없다면 새로 만들고
                          기존에 중복된 이름의 뷰가 있다면 해당 뷰를 변경(갱신)하는 옵션

 

요렇게 다중조인과 긴 쿼리문이 있다.

 

위의 긴 쿼리문을 'VW_EMPLOYEE'라는 뷰로 생성을 한다.

 

 

이렇게 뷰를 테이블처럼 써서 조회하면 편하게 조회가 가능하다.

 

 

 

 

 

기존의 뷰에 없는 컬럼을 추가 하고싶은 경우 , CREATE OR REPLACE VIEW를 통해 컬럼을 추가하고 뷰명 그대로

뷰를 갱신할 수 있다.

 

 

뷰는 논리적인 가상테이블 ==> 실질적으로 데이터를 저장하고 있지않음(쿼리문이 TEXT로 저장)
-- 참고) 해당 계정이 가지고 있는 VIEW들에 대한 내용을 조회하고자한다면
-- 데이터 딕셔너리중 USER_VIEWS를 조회하면 된다.

 

 

 

 

※뷰 컬럼에 별칭 부여
  서브쿼리의 SELECT절에 함수산술연산식이 기술되어 있는 경우 반드시 별칭 지정!!(엘리어스★)

 

 

뷰에 '근무년수'라는 엘리어스를 줬기때문에 이렇게 편하게 조회가 가능하다.


뷰를 이용해서 DML(INSERT, UPDATE, DELETE) 사용 가능
뷰를 통해서 변경 => 실제 데이터가 담겨있는 베이스테이블에 적용이 된다.
    
뷰는 가상테이블인데? 데이터를 조작할 수 있다.

 

뷰에서 행을 INSERT하면 원본 JOB테이블을 조회했을때 값이 추가된 것을 확인할 수 있다.

마찬가지로 UPDATE나 DELETE도 똑같이 원본테이블에 영향을 미친다.

 

 

 

BUT,

 

 

 

 

 

※ 뷰를 가지고 DML이 불가능한 경우가 더 많음

 

    1) 뷰에 정의되어 있지 않은 컬럼을 조작하는 경우
    2) NOTNULL 제약조건이 지정된 경우
    3) 산술연산식 또는 함수를 통해서 정의되어 있는 경우
    4) 그룹함수 GROUP BY절이 포함된 경우
    5) DISTINCT 구문이 포함된 경우
    6) JOIN을 이용해서 여러테이블을 매칭시켜놓은 경우

 

 

 

 

 1) 뷰에 정의되어 있지 않은 컬럼을 조작하는 경우

 

 

 

 

2) 뷰에 정의되어있지 않은 컬럼중에 베이스테이블 상의 NOT NULL 제약조건이 지정된 경우

베이스테이블인 JOB테이블에 첫번째 컬럼값이 NOT NULL 제약조건이 걸려있기 때문에 오류가 뜬다.

 

 

 

 

 

 

3) 산술연산식 또는 함수를 통해서 정의되어있는 경우

 

 

 

 

 

4) 그룹함수나 GROUP BY절이 포함된 경우

 

 

 

 

 

5) DISTINCT 구문이 포함된 경우

 

 

 

 

 

 

6) JOIN을 이용해서 여러 테이블을 매칭시켜놓은 경우

 

 

'*SQL_Oracle*' 카테고리의 다른 글

OBJECT < SEQUENCE >  (0) 2021.11.12
OBJECT < VIEW > 옵션  (0) 2021.11.12
TCL < COMMIT, ROLLBACK >  (0) 2021.11.11
DCL < GRANT, REVOKE>  (0) 2021.11.11
DDL < ALTER, DROP >  (0) 2021.11.11