Practice makes perfect

[DataBase] 뷰(View) 본문

빅데이터/DataBase

[DataBase] 뷰(View)

kerpect 2020. 4. 13. 21:53

 

 

뷰(View)란?

 

: 실직적으로 데이터가 존재하지는 않는 테이블입니다. 이 테이블을 가상 테이블이라고도 부릅니다. 실제 정보를 가지고 있는 테이블을 물질 테이블이라고 하고 그 테이블에서 필요한 정보만 가상의 테이블을 만들어서 읽어 오는 것입니다.

 

 

● 뷰의 특징

 

 - 테이블이라고 이름을 붙이는 이유는 기능 자체가 테이블과 동일하기 때문입니다.

 - 실제 테이블의 정보를 뷰를 통해서 볼 수 있고, 제한적으로 필요한 내용만 사용이 가능하게 해줍니다.

 - 실질적적인 물리적인 테이블이 존재하고 있어야지만 뷰를 생성할 수 있습니다.

 - as 다음으로 마치 서브쿼리문과 유사합니다.

 - 결과를 출력하기 위해서 맨번 select 문을 입력하기란 여간 번거로운 일이 아닐 수 없습니다. 뷰는 이 같이 번거로운

   select 문을 매번 입력하는 대신 보다 쉽게 원하는 결과를 얻고자 하는 바람에서 출발했다고 할 수 있습니다.

 

 

● 뷰의 사용 이유

 

 - 복잡하고 긴 쿼리문을 뷰로 정의하면 접근을 단순화 시킬 수 있습니다.

 - 보안에 유리합니다.

   ex) 인사과 뷰 -- 필요한 정보들만 보여주고, 개인의 월급 같은 경우는 숨길 수 있습니다.

 

● 뷰의 동작 원리

 

 1. 사용자가 뷰에 대해서 질의를 하면 user_views에서 뷰에 대한 정의를 조회합니다.
 2. 기본 테이블에 대한 뷰의 접근 권한을 살핍니다.
 3. 뷰에 대한 질의를 기본테이블에 대한 질의로 변환합니다.
 4. 기본 테이블에 대한 질의를 통해 데이터를 검색합니다.
 5. 검색된 결과를 출력합니다.

 

이제부터 자세히 예시를 통해서 설명하겠습니다.

 

1) 뷰 생성하기

create view emp_view30 --테이블 생성 하듯이 명령을 내릴 수 있습니다.
as 
select select empno, ename, deptno 
from emp_copy 
where deptno = 30;
-- (오류 발생) 오류 보고 -ORA-00936: missing expression : 권한이 부족합니다. 

※ view를 만들기 위해서는 마스터 아이디에게 권한을 부여 받아야지 처리할 수 있습니다. 

 

2) 권한 부여 하기

 

 

- 명령 프롬프트로 마스터 아이드를 로그인하여 권한을 부여 합니다.

 

 

 

 

 

 

SQL> sqlplus system/admin1234
SQL> show user
SQL> grant create view to scott;

 

 

 

 

 

 

권한을 준 이후에 뷰 생성 가능해집니다. 또한  view 권한을 부여하면 삭제가 되기 이전까지 그 권한을 가지고 있을 수 있습니다.

 

create view emp_view30
as
select  empno, ename, deptno 
from emp_copy 
where deptno = 30; 

emp_view30 뷰 생성 완료!

 

[예제] 기본 테이블은 emp_copy 로 합니다. 20번 부서에 소속된 사원들의 사번과 이름, 부서번호, 상관의 사번을 출력하기 위한 select 문을 emp_view20 이라는 이름의 부로 정의해 보세요.

 

create view emp_view20
as 
select empno, ename, deptno, mgr
from  emp_copy
where deptno = 20;

 

3) 뷰를 통해 데이터 저장하기

 

insert into emp_view30 values(8000, 'ANGEL',30);

 - 기본 테이블에도 뷰에서 입력한 값이 삽입 됩니다.
 - 주의) 기본 테이블이 무결성 데이터 제약 조건에 맞지 않을 때는 삽입이 불가합니다.
 - 즉, 무결성 계약 조건이 걸려있지 않을 때 가능합니다.

 -- update, delete도 사용 가능

 

4) 단순 뷰 사용 특징

 

● 단순 뷰에 대한 데이터 조작

 

insert into emp_view30
values(8010, 'CHELSOO', 30);
-- 삽입에 있어서 기본 데이터는 폴인키가 걸려 있지 않다면 DEPTNO의 값이 무엇이든 넣어도 상관 없습니다.

 

● 단순 뷰의 컬럼에 별칭 부여하기 

create view emp_view_copy(사원번호 , 사원명, 급여, 부서번호) 
as 
select empno, ename , sal, deptno from emp_copy; 
-- 뷰 이름 뒤에 가로를 넣어 그 안에 필드명 순서대로 이름을 넣습니다. 

create view view_sal 
as
select deptno, sum(sal) as "급여 합", avg(sal) as"급여 평균"
from emp_copy
group by deptno;
-- 그룹함수에 별칭을 입력해주면 값이 출력이 됩니다. 
-- 없는 컬럼 항목의 이름을 부여해서 출력 되어지게끔 해줍니다. 

select * from emp_view_copy where deptno =30; 
-- 주의) 뷰에 별칭을 붙이고 필드명으로 출력을 하려고 하면 오류가 납니다(ERROR)
select * from emp_view_copy where 부서번호 =30; 
-- 별칭으로 입력을 하면 값이 출력 됩니다. 

 

5) 복합뷰 :  : 2개 이상의 테이블 값을 한번에 가져와서 수행할 수 있습니다. 

create view emp_view_dept 
as
select empno, ename, sal, e. deptno, dname, loc
from emp e, dept  d
where e.deptno = d. deptno 
order by empno desc;

- 공통의 컬럼이 존재하면 어떤 테이블의 값인지 적어줘야 합니다.

 

6) 뷰 삭제

drop view  emp_view_dept ; 

 

7) 뷰의 다양한 옵션

 

● or replace

: 존재하지 않는 뷰이면 새로운 뷰를 생성하고, 기존에 존재하는 뷰이면 그 내용을 변경합니다.

- 동일 이름의 뷰를 만들면 변경합니다. (수정과 생성을 한번에!!)

 

create or replace view  emp_view30
as
select empno, ename, comm, deptno 
from emp_copy
where deptno = 30; -- 위의 테이블을 삭제하고 새로운 테이블을 덮어 씌운다. 

 

● force / noforce

force : 기본테이블이 존재하지 않을 때도 뷰를 생성해야 하는 경우 사용하는 옵션입니다.

- 데이터에 대한 처리 보다 의미나 의지치만 확인 할 때 사용하는 개념으로 가지고 있으면 됩니다.(임시적 개념)

noforce : 기본테이블이 존재하는 경우만 뷰가 생성(default) 합니다.

- 아무것도 지정하지 않았을 때는 noforce로 처리됩니다. 

 

<force>

create or replace force view employees_view
as
select empno, ename, deptno 
from employees
where deptno = 30;
-- 경고: 컴파일 오류와 함께 뷰가 생성되었습니다. 경고는 발생하고 있지만 생성은 완료합니다. 
-- 임시적으로 뷰 테이블을 생성하고 싶을 때 사용할 수 있습니다. 하지만 데이터 삽입은 불가합니다. 

 

● with check option

: 뷰를 생성할 대 조건 제시에 사용된 컬럼 값을 변경 못하도록 하는 기능 입니다. 
- 뷰를 설정할 때 조건으로 설정한 칼럼 이외의 다른 커럼의 내용은 변경할 수 있습니다.

 

create or replace view view_chk30
as
select empno, ename, sal, comm, deptno 
from emp_copy
where deptno = 30 with check option 
 
 update view_chk30
 set deptno =20
 where sal >= 900; 
 -- ERROR : 오류 보고 -ORA-01402: view WITH CHECK OPTION where-clause violation 
 -- with check option deptno의 값(deptno) 을 변경 불가하도록 만듭니다. 

 

● with read only

: 기본 테이블의 어떤 컬럼에 대해서도 뷰를 통한 내용 수정을 불가능하게 만드는 옵션입니다.

 

 create or replace view view_read30
 as
 select empno, ename, sal, comm, deptno 
 from emp_copy03
 where deptno = 30 with read only;

select * from  view_read30;

update  view_read30 
set comm = 3000; 
-- ERROR : SQL 오류: ORA-42399: cannot perform a DML operation on a read-only view 
--  with read only; 읽기 전용으로 명령을 수행할 수 없다. 

 

with check option VS with read only (차이점)

with check option는 뷰를  설정할 때 조건으로 설정한 컬럼이 아닌 컬럼에 대해서는 변경이 가능하고,

with read only : 모든 값에 대해서 변경이 불가 합니다.

'빅데이터 > DataBase' 카테고리의 다른 글

[DataBase] 인덱스(Index)  (0) 2020.04.14
[DataBase] 시퀀스(Sequence)  (0) 2020.04.14
[DataBase] 서브 쿼리 (Sub - Query)문  (0) 2020.04.12
[DataBase] 조인(JOIN)  (0) 2020.04.12
[DataBase] 데이터 무결성 제약 조건(DICR)  (0) 2020.04.12