: 1개 이상의 테이블이나 다른 뷰를 이용해서 생성하는 가상의 테이블
① View 생성
CREATE OR REPLACE VIEW 뷰이름(컬럼명, 컬럼명2,...) AS SELECT 원본컬러명, 원본컬럼명2, ... FROM 테이블명 WHERE 조건식;
-> 참고) 뷰이름(컬럼명, 컬럼명2,...) => 뷰이름 : 생략가능(컬럼명)
CREATE OR REPLACE VIEW VW_EMP_JOB(ENO, ENAME, DNO, JOB)
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMPLOYEE
WHERE JOB LIKE 'SALESMAN%';
② View 조회
SELECT * FROM 뷰이름;
SELECT * FROM VW_EMP_JOB;
SELECT * FROM USER_VIEWS;
③ View 삭제
DROP VIEW 뷰이름;
DROP VIEW VW_EMP_JOB;
(심화*) 뷰에 INSERT 가능? O
예제 2) VW_EMP_JOB 에 INSERT 하기
뷰컬럼 : ENO(사원번호), ENAME(사원명), DNO(부서번호), JOB(직위)
INSERT INTO VW_EMP_JOB
VALUES(8000, '윤정화', 30, 'SALESMAN');
-- 데이터 확인
SELECT * FROM VW_EMP_JOB;
-- 확정
COMMIT;
예제 3) 뷰에 그룹함수를 사용해서 만들기
부서별(DNO) 급여합계(SUM(SALARY)), 급여평균(AVG(SALARY))을 출력하는 뷰를 생성하세요
뷰이름 : VW_EMP_SALARY
컬럼 별칭 : 급여합계(SUM(SALARY)) AS SAL_SUM
컬럼 별칭 : 급여평균(AVG(SALARY)) AS SAL_AVG
주의점 ) 그룹함수로 뷰생성시 그룹함수 별명을 넣어야함
CREATE OR REPLACE VIEW VW_EMP_SALARY
AS
SELECT SUM(SALARY) AS SAL_SUM
,AVG(SALARY) AS SAL_AVG
FROM EMPLOYEE
GROUP BY DNO;
-- 데이터 확인
SELECT * FROM VW_EMP_SALARY;
-- 그룹함수 사용 뷰에서 INSERT 가능 ? X
INSERT INTO VW_EMP_SALARY
VALUES(1000, 3000); -- 에러
예제 3) 뷰(View) 삭제
사용법) DROP VIEW 뷰이름;
DROP VIEW VW_EMP_SALARY;
(참고) 뷰에 INSERT 가능 : (그룹함수 없을때)
뷰에 INSERT 기능 제한 : WITH READ ONLY
예제 4) WITH READ ONLY 옵션을 붙여서 뷰 만들기
SQL : 직위가 MANAGER 인 사원을 출력하는 뷰 만들기
CREATE OR REPLACE VIEW VW_EMP_JOB_READ
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMPLOYEE
WHERE JOB LIKE '%MANAGER%' WITH READ ONLY;
-- INSERT 테스트
INSERT INTO VW_EMP_JOB_READ
VALUES(9000,'김주현',30, 'MANAGER'); -- 에러 발생