728x90
VIEW
- 가상 테이블
- 보안: 일부 칼럼에 대해서만 접근, 조회 전용
- 편리성
- view 생성
- create view 뷰이름 as select구문;
- view 삭제
- drop view 뷰이름;
- 30번 부서원들의 부서번호, 사번, 이름, 급여정보를 갖는 view 생성
- view 이름: view_emp30
예제
예제와 함께 SQL 쿼리들을 쭉 실행해보는 느낌으로다가 ㄱㄱ
use ssafydb;
-- 30번 6명
-- 조회
select department_id, employee_id, first_name, salary
from employees
where department_id=30;
-- view 생성
create view view_emp30
as
select department_id, employee_id, first_name, salary
from employees
where department_id=30;
-- view 레코드 조회
select * from view_emp30;
-- employees 직원 테이블 30번 부서원을 추가
insert into employees(employee_id, last_name, email, hire_date, job_id, department_id)
values (207, 'Kang', 'KSMLUCKY', '2022-01-01', 'IT_PROG', 30);
-- employees 테이블 30번 부서원 정보 조회
select *
from employees where department_id = 30;
-- view_emp30 뷰 확인: 추가된 30번 부서원 정보 조회 가능
select * from view_emp30;
-- view_emp30 뷰 이용해서 추가된 직원(207) 삭제
delete from view_emp30 where employee_id = 207;
-- employees 테이블 207번 부서원 정보 조회
select *
from employees where department_id = 207;
-- view_emp30 뷰 확인: 삭제된 30번 부서원 정보 조회 가능
select * from view_emp30;
-- view_emp30 뷰 이용해서 직원 추가(부서번호, 사번, 이름, 급여) -> 에러남
-- 직원 테이블 필수항목: employee_id(PK), last_name, email, hire_date, job_id
-- 필수항목 누락된 view 구조이기 때문!!!
insert into view_emp30
values (30, 300, 'Kang', 5000);
- 에러남! -> 필수 항목이 누락된 구조로 데이터 삽입(insert)하려고 하기 때문!
-- view를 통해서 레코드 추가 가능: 필수항목 포함하는 view 구조 생성
-- 직원 테이블 필수항목: employee_id(PK), last_name, email, hire_date, job_id
-- 부서번호, employee_id(PK), last_name, email, hire_date, job_id 구조를 갖는 뷰 생성
-- view 생성 및 변경(없으면 만들어주고 이미 있으면 변경)
create or replace view view_emp30
as
select department_id, employee_id, last_name, email, hire_date, job_id, salary
from employees
where department_id=30;
-- 필수항목 모두 포함한 view이므로 레코드 추가도 가능한 view: crud 모두 가능한 view
-- 레코드 추가: 30번 부서원 추가
-- 레코드 추가: 90번 부서원 추가
insert into view_emp30
values (30, 300, 'Kang', 'email', current_date(), 'IT_PROG', 3000);
insert into view_emp30
values (90, 301, 'Kim', 'email1', current_date(), 'IT_PROG', 3000);
-- view_emp30 뷰 확인: 추가된 30번 부서원 정보 조회 가능, 그러나 90번은 확인 불가(뷰말고 테이블에서는 확인 가능)
select * from view_emp30;
select * from employees where employee_id=301;
- VIEW로 추가한 데이터가 테이블에도 추가된 것을 확인 가능!
정리
- VIEW는 테이블이 직접 저장되는게 아니고 그 VIEW를 만들기 위한 SQL이 저장되는 것이므로 메모리가 테이블보다 많이 소모되지 않는다!
- 위의 예제처럼 VIEW를 통한 데이터의 추가, 삭제도 가능하다!
728x90