[SQL] VIEW

지미미·2023년 4월 21일
0

Oracle SQL Developer

목록 보기
9/15
post-thumbnail

VIEW

SELECT 문을 저장할 수 있는 객체 (논리적인 가상 테이블)
데이터를 저장하고있지 않으며 테이블에 대한 SQL만 저장되어있어 VIEW 접근할 때 SQL을 수행하면서 결과값을 가져온다.

CREATE [OR REPLACE] VIEW 뷰名
        AS 서브쿼리;
  • 이미 있는 뷰라면 OR REPLACE를 꼭 써서 재정의해줌: 기존 객체가 존재하는 경우 수정(덮어쓰기)
  • VIEW는 가상 테이블이기 때문에 실제 데이터가 담겨있는건 아님.
  • 결과 집합을 확인하기 위한 용도랄까? => 사용 빈도가 높은 서브쿼리를 뷰로 저장해두면 유용하다.
  • VIEW에 대한 결과 조회도 가능함
SELECT * FROM USER_VIEWS;
  • 서브쿼리 컬럼에 이미 별칭이 있어도, 뷰를 생성하면서 다시 부여하면 재정의된다.
CREATE VIEW V_EMP_02 ("사번2", "사원명2", "성별2", "근무년수2")
AS SELECT EMP_ID 사번, EMP_NAME 사원명 
        , DECODE(SUBSTR(EMP_NO,8,1),'1','남', '2','여' ,'3','남', '4','여', '') 성별
        , ROUND((SYSDATE - HIRE_DATE)/365) || '년' 근무년수
    FROM EMP
;
DROP VIEW V_EMP02;
SELECT * FROM V_EMP_02;
  • <VIEW를 이용해서 DML 사용>
    뷰를 통해 데이터를 변경하게 되면 실제 데이터가 담겨있는 기본 테이블에도 적용된다.
    • INSERT, UPDATE, DELETE 등등 가능
  • 다만, DML 구문으로 VIEW 조작이 불가능한 경우가 있다.
    1. VIEW 정의에 포함되지 않는 컬럼을 조작하는 경우
    1. 뷰에 포함되지 않은 컬럼 중 기본 테이블에 NOT NULL 제약 조건이 지정된 경우
    2. 산술 표현식으로 정의된 경우 (산술연산이 사용된 컬럼을 삽입/수정 불가, 산술연관과 무관한 컬럼은 수정 가능 )
    3. 그룹함수나 GROUP BY절을 포함한 경우
    4. DISTINCT를 포함한 경우
    5. JOIN을 사용해서 여러 개의 테이블을 사용한 경우
      => VIEW를 생성할 수는 있지만 DML문을 사용하여 데이터를 조작할 수는 없다.
  • VIEW 옵션 ^_^
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 뷰이름
AS 서브쿼리
[WITH CHECK OPTION]
[WITH READ ONLY]; 
  • OR REPLACE 기존에 동일한 뷰가 있으면 덮어쓰고 없으면 신규로 생성한다.
  • FORCE 서브쿼리에 기술된 테이블이 존재하지 않아도 뷰가 생성된다.
  • NOFORCE 서브쿼리에 기술된 테이블이 존재해야지만 뷰가 생성된다. (기본값)
  • WITH CHECK OPTION 서브쿼리에 기술된 조건에 부합하지 않는 값으로 수정하는 경우 오류를 발생시킨다.
  • WITH READ OLNY 뷰에 대한 조회만 가능하다(DML 사용 불가)
profile
블루라이트로 광합성 하는 새럼

0개의 댓글