VIEW
SELECT 쿼리의 실행 결과를 화면에 저장한 논리적 가상 테이블이다.
실제 테이블과는 다르게 실질적 데이터를 저장하고 있진 않지만 사용자는 테이블을 사용하는 것과 동일하게 사용이 가능하다.
실제 데이터를 저장하는 게 아니라 SQL 쿼리문을 가지고 있는 것이다.
** 서브쿼리의 SELECT 절에 함수가 사용된 경우 반드시 별칭을 지정해야 한다.
** 생성된 뷰를 가지고 DML 구문(INSERT, UPDATE, DELETE) 사용이 가능하다.
** 생성된 뷰에 요청한 DML 구문은 베이스 테이블의 데이터들도 변경이 가능하다.
- VIEW 옆에 ( 컬럼 별칭 )을 지정할 수 있다. 대신에 이 방법은 서브 쿼리 안에 있는 모든 컬럼들에도 별칭을 부여해야 한다.
- 서브 쿼리의 SELECT 절에 함수나 산술 연산이 기술되어 있는 경우 반드시 별칭을 지정해야 한다.
DML 명령어로 VIEW 조작이 불가능 한 경우
- 뷰 정의에 포함되지 않는 컬럼을 조작하는 경우
** 뷰 정의에 포함되지 않은 컬럼을 INSERT/UPDATE 하는 경우 에러 발생
** 뷰에서 정의한 컬럼의 갯수와 INSERT하려고 하는 컬럼의 갯수가 동일해야 한다.
- 뷰에 포함되지 않은 컬럼 중에 베이스가 되는 컬럼이 NOT NULL 제약조건이 지정된 경우
** 뷰에 포함되지 않은 NOT NULL 제약 조건이 있는 컬럼이 존재하면 INSERT 시 에러 발생
** UPDATE/DELETE 는 가능하다.
- 산술 표현식으로 정의된 경우
** 뷰에 산술 계산식에 포함된 경우 INSERT/UPDATE 시 에러 발생
** 단, DELETE는 가능하다.
- 그룹 함수나 GROUP BY 절을 포함한 경우
** 그룹함수 또는 GROUP BY를 사용한 경우 INSERT/UPDATE/DELETE 시 에러 발생
- DISTINCT를 포함한 경우
** DISTINCT를 사용한 경우 INSERT/UPDATE/DELETE 시 에러 발생
- JOIN을 이용해 여러 테이블을 연결한 경우
** 뷰 정의 시 JOIN을 사용한 경우 INSERT/UPDATE 시 에러 발생
** 단, DELETE는 가능하다.
VIEW 구조
뷰 정의시 사용한 쿼리 문장이 TEXT 컬럼에 저장되어 있다.
뷰가 실행될 때는 TEXT에 기록된 SELECT에 문장이 다시 실행되면서 결과를 보여주는 구조이다.
SELECT * FROM USER_VIEWS;
VIEW 옵션
1. OR REPLACE 옵션
- 생성한 뷰가 존재하면 뷰를 갱신함
2. FORCE/NOFORCE 옵션
- FORCE 옵션은 기본 테이블이 존재하지 않더라도 뷰 생성 NOFORCE 옵션이 기본 값으로 지정되어 있음
3. WITH CHECK OPTION 옵션
- 옵션을 설정한 컬럼의 값을 수정 불가능하게 함**(삭제는 가능)**
4. WITH READ ONLY 옵션
- 뷰에 대해 조회만 가능하고 삽입, 수정, 삭제 등은 불가능하게 한다. (DML 불가능)
인라인 뷰(INLINE - VIEW)
일반적으로 FROM절에 사용된 서브쿼리의 결과 화면에 별칭을 붙인 것
FROM절에 서브쿼리를 직접 사용해도 되고 따로 뷰를 생성한 후에 FROM절에 생성한 뷰를 사용해도 된다.
'Programming > SQL(Oracle)' 카테고리의 다른 글
DAY 65. [DataBase] 객체 INDEX (0) | 2021.10.22 |
---|---|
DAY 64. [DataBase] 객체 SEQUENCE (0) | 2021.10.21 |
DAY 56. [DataBase] 오라클 DML(INSERT, UPDATE, DELETE) (0) | 2021.10.12 |
DAY 55. [DataBase] 오라클 DDL(ALTER, DROP) (0) | 2021.10.11 |
DAY 53. [DataBase] 오라클 DDL(CREATE), 제약조건 (0) | 2021.10.09 |