Database- View

Nguyen Tinh·2023년 5월 11일
0

database

목록 보기
3/4
post-thumbnail

--뷰

--권한시스템이 만들어야

--필요할때마다 실행하고 결과를 보여준다.

--2테이블-3개 속성 하나 테이블로 만들고 싶어->뷰-> 메모리에 저장하지 않는다

--물리적인 존재 안 함

--가상 테이블

--실제로 데이터를 저장하지 않고 퀴리문만 저장한다.

--뷰:

--[실습1] 뷰의 기본 테이블 생성하기

--테이블 삭제

drop table emp_copy;

--테이블 하나 생성

create table emp_copy

as select * from emp;
select * from emp_copy;

--뷰 생성 --에러(뷰 생성 권한이 없음 -insufficient privileges)

create view emp_view_dept30

as

select empno,ename,deptno

from emp_copy

where deptno=30;

--sys 가 학번에게 뷰 생성 권한을 부여-->system에서 뷰 권한을 줌.

conn system 

-->system 접속->계정 바꿔

grant create view to s학번;

--user:system

--password:manager

--권한을 취소할때

revoke create view to s학번;

--자기 계정으로 접속

conn s학번;

--pw:tiger;

--뷰 데이터 사전 조회

desc user_views;

--viewname, text, readonly주의

--

select view_name, text, read_only

from user_views

where view_name in ('EMP_VIEW_DEPT30');
select * 

from emp_view_dept30;

--실제 존재하지 않다

--위에(

--create view emp_view_dept30

--as

--select empno,ename,deptno

--from emp_copy

--where deptno=30;) 돌면서 실행 결과를(select *

--from emp_view_dept30;)에 넣어 줌

--sales 부서에 소속되어 있는 사원의 정보를 뷰 emp_view_sales 생성( empno, ename, dname로 구성)

select empno, ename, dname

from emp_copy, dept

where emp_copy.deptno=dept.deptno

and dname ='SALES';
create view emp_view_sales

as

select empno, ename, dname

from emp_copy, dept

where emp_copy.deptno=dept.deptno

and dname ='SALES';
select * from emp_view_sales;

--1)테이블 조인으로 작성

--sales 부서에 근무하고 , A로 시작하는 사원(이름)의 정보를 출력

select empno, ename, dname

from emp, dept

where dname='SALES'

and dept.deptno =emp.deptno

and ename like 'A%';

--2)뷰 emp_view_sales에서 정보를 출력

select empno, ename, dname

from emp_view_sales

where ename like 'A%';

--emp_view_dept30에 데이터를 추가한다'

--뷰에 데이터가 변화가 생김년 기분 테이블에는 똑 같은 변화가 생긴다.(동기화)

--이 뷰의 기본 테이블은 emp_copy(base table)

insert into emp_view_dept30

values(1111,'park',30);
select *

from emp_view_dept30;
desc emp_view_dept30;
select * from emp_copy;

--작성한 뷰 확인

select view_name, text, read_only

from user_views;

--뷰 삭제

drop view 뷰이름;

--or replace 옵션

--뷰를 생성하거나 존재하는 경우 변격시키는 옵션

--emp_view_dept30 을 변경

create or replace view emp_view_dept30

as

select empno, ename, sal, comm, deptno

from emp_copy

where deptno=30;

--뷰가 없으면 새거만들고 이미 있으며 덮어쓰다

--뷰 확인

desc emp_view_dept30;

--with check option: 조건의 컬럼값을 뷰를 통해 **변경하지

--못하게** 하는 옵션

--(where절의 내용만 변경 못해게 함. 다른 필드 값 변경은 가능)...

--테이블 생성

create table emp_copy2

as

select * from emp_copy;

--부서번호가 30인 사원의 정보 검색하는 뷰(with check option)

create or replace view view_chk30

as

select empno, ename, sal, comm, deptno

from emp_copy2

where deptno = 30

with check option;

select * from view_chk30;

--급여가 1200 이상인 사원의 부서번호를 20으로 변경하기

--에러 : view WITH CHECK OPTION where-clause violation

--with check option는 where 절의 내용을 변경 못하게 함

--where 절의 필드명 변경은 금지, 다른 값을 변경 가능

--X

update view_chk30

set deptno=20

where sal > 1200;
--O

update view_chk30

set comm=200

where sal > 1200;

select * from view_chk30;

**--with read only 옵션 가진 뷰정의

--with read only 옵션은 내용을 변경은 금지
**

create or replace view view_read30

as

select empno, ename, sal, comm, deptno

from emp_copy2

where deptno=30

with read only;

--부를 수정

--에러: cannot perform a DML operation on a read-only view

--에러(with read only이므로 변경 안됨)

**update view_read30

set comm=2000;
**

* 연습문제 *

1. 부서별 최대 급여와 최소 급여를 출력하는 뷰를 작성하라.

create or replace view view_sal

as

select d.dname, max(e.sal) as max_sal, min(e.sal) as min_sal

from emp_copy e, dept d

where e.deptno = d.deptno

group by d.dname;

0개의 댓글