# VIEW

### table 대신 view 쓰는 이유



간혹 create table 말고 create view 하는 경우가 있습니다.&#x20;

테이블이랑 똑같은 view 라는 친구가 있는데 뭔지 알아봅시다.&#x20;



### VIEW란?



SELECT 로 찾은 행들이 너무나 마음에 들어서

테이블로 두고두고 저장해서 쓰고 싶습니까?&#x20;

그럼 실제 테이블로 저장해도 되겠지만 더 간단하게 view로 만들어둘 수도 있습니다.&#x20;

view는 가상의 테이블입니다. 테이블처럼 사용할 수 있습니다.&#x20;



```sql
CREATE VIEW 뷰이름 AS
SELECT 컬럼1, 컬럼2, ...
FROM 테이블명 
```



view 만드는 문법은 이렇습니다.&#x20;

SELECT로 찾은 행들을 view로 만들어달라는 코드입니다.&#x20;

&#x20;



✨ 실습. 기존에 사용하던 테이블 중 아무거나 JOIN 해서 VIEW를 만들어 봅시다.







```sql
SELECT *
FROM SALES s  INNER JOIN ITEM i  
ON s.id = i.id;
```







<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FuFqJSIx2GeqBjRmCOHAv%2Foracle1.png?alt=media&#x26;token=8000b481-1365-476e-a3ea-77bffc0d918c" alt=""><figcaption></figcaption></figure>



\- OR REPLACE : 해당 구문을 사용하면 뷰를 수정할 때 DROP 없이 수정이 가능하다.&#x20;

\- FORCE : 뷰를 생성할 때 쿼리문의 테이블, 컬럼, 함수 등이 존재하지 않아도 생성이 가능하다.

\- NORORCE : 뷰를 생성할 때 쿼리문의 테이블, 컬럼 함수 등이 존재하지 않으면 생성되지 않는다.

\- column\_aliases : SELECT 컬럼의 별칭을 미리 정의할 수 있다.

\- WITH READ ONLY : SELECT 만 가능하다. (INSERT, UPDATE, DELETE 불가능)

\- WITH CHECK OPTION : WHERE 절의 조건에 해당하는 데이터만 저장, 변경이 가능하다.



### **view 쓰는 이유**&#x20;



뭐든 나중에 써먹으려고 배우는 것입니다.&#x20;

용도를 잘 생각해봅시다.&#x20;



&#x20;1\. 복잡하게 JOIN 해놓은 테이블들을 하나의 테이블 또는 view로 만들어두면 두고두고 재사용할 수 있어서 편리합니다.&#x20;

2\. 근데 view는 실제 테이블이 아니라서 테이블만큼 하드용량을 많이 차지하지 않습니다.

3\. table에 컬럼변경이 필요할 때 view를 만들어서 먼저 실험해볼 수 있습니다.

4\. view 안에서 또 SELECT 해서 view를 만들 수도 있습니다. 너무 많은 중첩은 금지&#x20;



열심해 JOIN해서 작성해놨던 SELECT 문을 쉽게 테이블형태로 재사용하고 싶을 때 view를 가장 많이 사용합니다.

그리고 보안상의 이유로도 VIEW를 사용합니다. 예를 들어 사원정보 테이블이 있다고 가정했을 때&#x20;

주민등록번호나 급여와 같이 민감한 개인정보를 모든 개발자가 접근 가능하다면 문제가 생길것 같지 않나요? 그래서 VIEW로 사원정보의 필요한 일부 컬럼만 사용하도록 하고 VIEW의 조회권한을 주고 사원정보 테이블은 조회권한을 주지 않는 형식으로 사용합니다.



&#x20;

&#x20;

(참고)

view는 가상테이블이라고 했지만 실제로 테이블이 생성되는게 아니라

SELECT 문법을 테이블형태로 눈속임해주는 것일 뿐입니다.
