본문 바로가기

SQL/Oracle

[Oracle] View

728x90

뷰(view)
- 가상 테이블
- 하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있게 하는 데이터베이스 객체
- 실제 데이터는 뷰를 구성하는 테이블에 담겨 있지만, 마치 테이블처럼 사용할 수 있음

 

뷰의 장점
- 복잡한 쿼리를 단순화 시킬 수 있음
- 개발자에게 필요한 정보만 접근하도록 접근 제한을 할 수 있음
    
create or replace view 뷰이름 as
     ...

 

속성
- or replace : 뷰를 수정할 때 drop을 사용하지 않고 수정할 수 있음
- force : 뷰를 생성할 때 쿼리문의 테이블, 컬럼, 함수 등이 존재하지 않아도 생성이 가능
- with read only : select만 가능함 (insert, update, delete 불가능)
- with check option : where 절의 조건에 해당하는 데이터만 저장. 변경이 가능

 

조인문 -> view

 

조인문

select mem_userid, mem_name, mem_gender, ord_product, ord_price from tb_member inner join tb_order on tb_member.mem_userid = tb_order.ord_userid;

view

create or replace view vw_memorder as 
select mem_userid, mem_name, mem_gender, ord_product, ord_price from tb_member inner join tb_order on tb_member.mem_userid = tb_order.ord_userid;

조인문의 결과를 테이블로 저장

 

뷰 조회

select * from vw_memorder;

 

뷰 삭제

drop view vw_memorder;

 

뷰 테이블 컬럼명 변경하여 생성

create or replace view 뷰명("컬럼1별명", "컬럼2별명"...) as

    ...

    tb_student 테이블에서 성별로 그룹을 맺어 성별, 인원, 평균나이의 데이터를 저장하는 가상 테이블을 작성
    (각 필드명은 gender, count, avgage로 생성)

create or replace view vw_memorder("userid", "name", "gender", "product", "price") as 
	select mem_userid, mem_name, mem_gender, ord_product, ord_price from tb_member inner join tb_order on tb_member.mem_userid = tb_order.ord_userid;

테이블의 구조 유추를 방지할 수 있음

 

 

데이터 삽입

1. insert 문을 이용하여 데이터 삽입

insert into tb_student values (1, '김사과', 20, 'female', '010-1111-1111');

 

2. 뷰를 통해 데이터 삽입

  2-1. 뷰 생성

create or replace view vw_stugender2 as
    select s_idx, s_name, s_Age, s_gender from tb_student;

  2-2. 데이터 삽입

insert into vw_stugender2 values (2, '반하나', 21, 'female');

테이블 조회

select * from tb_student;

 

with read only 읽기전용

create or replace view vw_stugender2 as
    select s_idx, s_name, s_Age, s_gender from tb_student
    with read only; -- 읽기 전용으로 변경

데이터 삽입

insert into vw_stugender2 values (3, '오렌지', 22, 'male');

읽기 전용이므로 데이터 삽입 불가

 

728x90

'SQL > Oracle' 카테고리의 다른 글

[Oracle] PL/SQL  (0) 2022.06.16
[Oracle] sequence  (0) 2022.06.16
[Oracle] join  (0) 2022.06.15
[Oracle] oracle함수  (0) 2022.06.13
[Oracle] group by(그룹), 집계 함수 count()  (0) 2022.06.13