[SQL] 연습

[SQL] View의 특징과 생성 및 삭제

Simon Yoon 2022. 6. 26. 23:30

View(뷰)란?

View(뷰)란, 테이블로부터 유도된 가상의 테이블을 의미합니다. 여기서 포인트는 '가상의 테이블'이라는 점입니다.

'가상의 테이블'이므로 실제 데이터를 저장하고 있지는 않습니다.

 

그렇다면 View는 왜 사용하는 것일까요?

View의 역할은 가상 테이블로 특정한 쿼리를 실행한 결과만 보고자 할 때 사용합니다. 다시 말하면 테이블을 참조해서 원하는 칼럼만을 조회하는데 View를 사용하면 쿼리를 더 단순하게 만들 수 있다는 장점이 있기 때문입니다.

 

이번에는 View의 특징을 살펴보겠습니다.

    1. 참조한 테이블이 변경될 경우, View도 함께 변경된다.

    2. 한번 생성된 View는 수정이 불가능하며, 따라서 한번 생성된 View는 변경을 원할 경우 삭제 후 재생성해야 한다.

    3. 특정 컬럼만 조회하게 만듦으로써 보안성을 향상시킨다.

    4. 인덱스 설정이 불가능하다.

일단 View는 한 번 생성할 경우 편하게 사용할 수 있지만, 수정이 불가하므로 삭제 후 재생성해야 하는 점에 유의하면 좋을 것 같습니다. 다만 ALTER VIEW를 사용해서 VIEW를 새롭게 생성하는 것이 가능합니다.

alter view v_viewtest1
as
	select B.mem_id '회원아이디', M.mem_name '회원이름',
			B.prod_name '제품이름',
            concat(M.phone1, M.phone2) '연락처'
    from buy B
		inner join member M
        on B.mem_id = M.mem_id
;

 

 

View의 생성

View를 생성할 때는  create view <view name> as ...  형식을 사용합니다. View를 생성하는 예시를 한번 확인해보겠습니다.

1. 저는 아래와 같은 member라는 이름의 테이블에서 mem_name과 debut_date에 대해서 mem_debut라는 이름의 view를 생성하고자 합니다.

예시 데이터

2. 그러면 아래와 같은 쿼리문을 작성합니다.  create view <view name> as select <columns...> from <table name> ;  형식입니다.

create view mem_debut as
select mem_name, debut_date
from member
;

 

3. 이제 View가 잘 생성되었는지 select문을 이용해서 조회해보겠습니다. 참고로 View도 일반 테이블처럼 select문을 이용해서 조회할 수 있습니다.

select * from mem_debut;

생성한 View의 조회

4. View를 삭제하고자 한다면,  drop view <view name> ;  쿼리를 사용합니다.

반대로 view가 참조하는 테이블이 삭제된다면, view를 조회하려고 해도 참조할 테이블이 사라졌기 때문에 조회할 수 없습니다.

 

View를 통한 테이블 수정

View를 이용해서도 테이블 수정이 가능합니다.

먼저 아래와 같은 member table이 있을 때, 이 member table에서 일부 컬럼만 확인할 수 있는 view를 생성해 보겠습니다.

member  table 일부

create view v_member
as
	select mem_id, mem_name, addr
	from member
;

기존의 member table을 이용해서 v_member view를 생성하고 확인해 보니 바로 아래와 같은 결과를 확인할 수 있습니다.

v_member view 생성

이때 update 문을 이용해서 v_member의 mem_id가 'BLK'인 그룹의 addr을 부산으로 변경해보겠습니다.

update v_member set addr = '부산' where mem_id = 'BLK' ;

이렇게 변경한 이후에 다시 v_member를 조회해보면 BLK의 addr이 부산으로 변경된 것을 확인할 수 있습니다.

addr 변경 후

그렇다면 원래 member table도 변경이 되었을까요?

member table 달라짐

아래의 결과 화면에서도 볼 수 있듯이 원래 addr이 경남에서 부산으로 변경되었음을 확인할 수 있습니다.

 

더 나아가서 view를 통해서 데이터 입력 insert into 문도 사용이 가능하지만 실제 table 에는 NOT NULL과 같은 제약사항이 있을 수도 있기 때문에 데이터가 입력이 안될수도 있습니다. 또한 이렇게 변경하는 것이 권장사항이 아닙니다.

'[SQL] 연습' 카테고리의 다른 글

[SQL] 사용자 정의 변수 @variable  (0) 2022.07.03
[SQL] CASE문  (0) 2022.07.02
[DB] mysql에서 한글 포함된 쿼리 insert 안될 때  (0) 2022.06.11
[DB] MongoDB  (0) 2022.05.01
[SQL] SQL 기본(3편)  (0) 2022.02.01