본문 바로가기

기타

[QnA] sql 가상테이블 view에 대해서

반응형


Q.
   SQL 가상 테이블 view에 대해서

CREATE VIEW gogack(name,phone) AS SELECT name,phone FROM gogack WHERE address='seoul'; 


"뷰는 물리적으로 저장하지 않고 CREATE VIEW 명령어로 뷰를 정의할 때, AS절 다음에 기술한 쿼리 문장 자체를 저장함"

이렇게 책에 나와있던데 

그러면 SELECT name,phone FROM gogack WHERE address='seoul'; 이 쿼리 문장을 실행시킨 결과를 가상테이블(gogack(name,phone))에 만들겠다는건가요?


 
A.
뷰를 가상테이블이라고 이해해도 아주 틀린 것은 아니지만 보통 뷰를 가상테이블이라고 말하지 않습니다. 왜냐하면 실제로 뷰에 데이터가 저장되어 있는 것은 아니기 때문이죠.
뷰는 SELECT 문에다 이름을 붙인 것입니다.
데이터베이스 내부적으로 SELECT 문을 저장한 후 이를 가리키기 위한 이름을 정해놓으면 이후에 SQL 문에서 뷰의 이름을 사용하면 결과적으로는 뷰에 해당하는 SELECT 문이 수행되는 것입니다.
질문의 gogack 뷰를 아래와 같이 질의를 하면
SELECT * 

FROM gogack;


결국은 아래와 같은 인라인뷰가 실행되는 것과 같은 결과를 얻습니다.
SELECT * 

FROM (SELECT name, phone FROM gogack WHERE address = 'seoul');

근데 질문의 예에서 뷰의 정의가 틀렸네요. 테이블과 같은 이름의 뷰는 만들 수 없거든요.

뷰는 보통 (애플리케이션에서 여러 번 사용되는) SELECT 문이 복잡한 경우, 테이블의 특정 컬럼에만 

접근할 수 있도록 할 경우 등에 사용합니다.

반응형