DB-View

2 minute read

View

뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블(저장장치에 불리적으로 존재X)이다.
데이터 보정작업, 처리과정, 시험 등 임시적인 작업을 위해 사용한다. => 편의성 최대화

  1. 장점
    • 논리적 데이터 독립성을 제공한다.
    • 동이한 데이터에 대해 여러사용자가 접근 가능하다.
    • 사용자의 데이터 관리를 해준다.
    • 접근 제어를 통한 자동 보안이 제공된다.
  2. 단점
    • 독립적인 인덱스를 가질 수 없다.
    • 정의된 View를 변경할 수 없다.
    • 삽입, 삭제, 갱신, 연산에 제약이 따른다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
-- View
-- 형식) create [or replace] view 뷰파일명 as select문~

-- View 생성
create or replace view vie1 as select * from trtest where jikwon_jik='사원'; -- 1)
select * from vie1; -- 2)
select * from vie1 where jikwon_gen='여';
select count(*) from vie1 where jikwon_gen='여';
desc vie1;

-- View 변경
rename trtest to abc; -- 원본테이블명 변경
select * from vie1; 
-- 테이블명이 변경되었으므로 셀렉트 되지 않는다. 
-- 원본 테이블에 전적으로 의존하고 있다.
rename abc to trtest;
select * from vie1; -- 다시 된다.

--View 삭제
drop view vie2; 

-- View 연습
select * from vie2;
select sum(jikwon_pay) as tot from vie2;

create view vie3 as select * from trtest where jikwon_name like '김%' or jikwon_name like '이%';
select * from vie3;

create view vie4 as select * from trtest order by jikwon_pay;
select * from vie4;

create view vie5 as select jikwon_name, jikwon_pay * 10000 as ypay from trtest;
select * from vie5;

-- view로 new view를 생성하는 것도 가능하다.
create view vie6 as select jikwon_name, ypay from vie5 where ypay>=50000000;
select * from vie6;

delete from vie6 where jikwon_name='채송화';
-- 뷰 파일의 데이터를 삭제하면, 원본파일의 데이터 또한 삭제된다!
select * from vie6;
select * from vie5;
select * from trtest;

select * from vie6;
update vie6 set ypay=80000000 where jikwon_name='이미라';
-- 실존하지 않는 칼럼인 ypay(단순 계산결과를 보여주기 위한 가상의 테이블)에 대하여 수정이 불가하다. 
update vie6 set jikwon_name='공기밥' where jikwon_name='이미라';
-- jikwon_name은 실존하는 칼럼이므로, 뷰를 통한 수정이 가능하다. 
select * from vie6;
select * from vie5;
select * from trtest;

create or replace view vie7 as select
jikwon_no, jikwon_name, buser_num, jikwon_pay from trtest 
-- not null인 칼럼 데이터를 포함해주지 않으면 뷰 파일로 insert 불가
where jikwon_pay>=5000;
select * from vie7; 
select * from trtest;
insert into vie7 values(20, '마당쇠', 20, 8000);
insert into vie7 values(21, '고로쇠', 30, 4000); 
-- 뷰 파일로 추가하는 것 가능하지만, 조심해야 할 부분이 있다는 것을 보여주는 예시!
-- vie7에서는 안보이지만, trtest에는 분명히 들어가있는 로쇠...

create or replace view vie8 as select
jikwon_jik, sum(jikwon_pay) as 연봉합, round(avg(jikwon_pay)) as 연봉평균 from trtest
group by jikwon_jik; -- select만 하고 있는 중. 얘를 가지고 결과 변형 불가.
select * from vie8;

create or replace view vie9 as select
jikwon_no, jikwon_name, buser_name, jikwon_jik from trtest
inner join buser on trtest.buser_num=buser.buser_no
where buser_num in (10,20);

select * from vie9;
delete from vie9 where jikwon_no=20;
update vie9 set jikwon_name='손오공' where jikwon_no=1;

내용 참조: 코딩팩토리 블로그
참조: 원본코드
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.

Categories:

Updated:

Leave a comment