인라인 뷰(INLINE-VIEW)
o 일반적으로 FROM절에 사용된 서브쿼리의 결과에 별칭을 붙인 것을 말함
o FROM절에 서브쿼리를 작성하며 서브 쿼리의 결과를 테이블로 사용하는 것이다.
o FROM절에 서브쿼리를 직접 사용해도 되고 따로 뷰를 생성 후 FROM절에 생성한 뷰를 사용해도 됨
o 테이블은 실제 물리적 테이블에 있는 값이 아닌 가상의 테이블 값이다.
-> 실제 테이블에서 추출한 가상의 테이블(실제 DB에 저장되어 있지 않은 테이블)
o 1번만 사용할 수 있는 테이블로 쓰이는 서브 쿼리 문 -> 자바의 익명 클래스와 같은 개념
SELECT ROWNUM, EMP_NAME, SALARY FROM EMPLOYEE WHERE ROWNUM <= 5 ORDER BY SALARY DESC;
* ROWNUM은 FROM절을 수행하면서 붙여지기 때문에 top-N분석 시 SELECT절에 사용한 ROWNUM이 의미 없게 됨 |
SELECT ROWNUM, EMP_NAME, SALARY FROM (SELECT * FROM EMPLOYEE ORDER BY SALARY DESC) WHERE ROWNUM <= 5;
* FROM절에 이미 정렬된 서브쿼리(인라인 뷰) 적용 시 ROWNUM이 top-N분석에 사용 가능 |
여사원의 사번, 사원명, 부서코드, 성별 출력하기 SELECT * FROM (SELECT EMP_ID, EMP_NAME, DEPT_CODE, DECODE(SUBSTR(EMP_NO,8,1),'1','남','2','여') AS 성별 FROM EMPLOYEE) WHERE 성별='여'; --FROM절 먼저 실행 후 WHERE절이 실행되기에 별칭을 사용할 수 있다. |
|
SELECT * FROM (SELECT EMP_NAME, DEPT_TITLE, JOB_NAME, SALARY, FLOOR((SELECT AVG(SALARY) FROM EMPLOYEE WHERE E.JOB_CODE=JOB_CODE)) AS JOBAVG FROM EMPLOYEE E JOIN DEPARTMENT D ON E.DEPT_CODE=DEPT_ID JOIN JOB J ON E.JOB_CODE=J.JOB_CODE WHERE DEPT_CODE IN ('D5','D6') ORDER BY 1 ); |
스토어드 뷰(STORED VIEW)
o 테이블로 쓰이는 서브 쿼리문을 작성하고 이름을 부여해서 재호출을 가능하게 하는 것이다.
VIEW 옵션
1. OR REPLACE
VIEW 생성 시 이미 이름이 존재하는 경우 덮어쓰기를 수행한다.
SELECT * FROM USER_VIEWS; CREATE OR REPLACE VIEW V_EMP AS SELECT * FROM EMPLOYEE JOIN DEPARTMENT ON DEPT_CODE=DEPT_ID; |
2. FORCE/NOFORCE
FORCE옵션은 기본 테이블이 존재하지 않더라도 뷰를 생성할 수 있게 해주는 옵션
NOFORCE 옵션이 기본 값으로 지정되어 있음
CREATE FORCE VIEW V_TEMP SELECT * FROM V_TEMP; -- 없는 테이블을 기반으로 생성했기에 조회할 수 없다.
CREATE TABLE TT( IDX NUMBER, NAME VARCHAR2(20) );
SELECT * FROM V_TEMP; ![]() -- 나중에 생성한 테이블의 항목을 따라간다. |
3. WITH CHECK OPTION
SELECT문의 WHERE 절에 사용한 컬럼은 수정이 불가능하게 하는 옵션
CREATE OR REPLACE VIEW V_EMP_SAL AS SELECT EMP_NAME, DEPT_CODE, SALARY, SALARY*12 AS 연봉 FROM EMPLOYEE WHERE DEPT_CODE='D5' WITH CHECK OPTION;
UPDATE V_EMP_SAL SET DEPT_CODE='D6' WHERE EMP_NAME='대북혼'; -- DEPT_CODE 변경시도 시 에러가 발생한다. |
4. WITH READ ONLY
VIEW에 대해 조회만 가능하고 삽입, 수정, 삭제 등은 불가능하게 함
CREATE OR REPLACE VIEW V_READ |
'DB' 카테고리의 다른 글
[SQL] PL/SQL – 타입 변수 선언, SELECT, INSERT문 처리 (0) | 2021.03.23 |
---|---|
[SQL] OBJECT SEQUENCE - 순차적 번호 생성 (0) | 2021.03.23 |
[SQL] VIEW – 구조, 특징, 조작 불가능한 경우 (0) | 2021.03.22 |
[SQL] DCL(Data Control Language) – GRANT, REVOKE, TRANSACTION (0) | 2021.03.20 |
[SQL] DML - INSERT, INSERT ALL, UPDATE, MERGE, DELETE (0) | 2021.03.19 |