Day38 - view

2021. 4. 8. 18:27Oracle 공부

이번에는 view 에 대해서 알아 봅시다 ~

 

view

view는 하나의 가상테이블 이라고 생각하시면 되겠습니다.

 

원본 테이블이 있고, 이 원본 테이블을 그대로 가상테이블로 만들어도 되고, 가위로 필요한 부분만 싹뚝싹뚝 잘라내서 가상테이블로 만들어도 됩니다.

 

view는 원본 테이블의 필요한 부분을 싹뚝싹뚝 잘라내서, 그 테이블을 가지고 계속 뭔가를 하고 싶을 때 !

이럴때, 많이 사용합니다.

 

view는 조회에 이점을 가집니다.
뷰를 이용해서 데이터에 접근하면 원본데이터는 안전하게 보호할 수 있습니다.
뷰는 계정에 생성권한이 있어야 만들 수 있습니다.

 

※ 사용자 권한 확인

GRANTED_ROLE 에 나와있는 걸 보면 되는데, resourece는 거의 다 되는거라고 보면 됩니다

단순뷰

단순뷰는 원본 테이블이 1개인 것을 의미합니다.

 

※ CREATE OR REPLACE VIEW 만들뷰이름 AS 서브쿼리;

OR REPLACE 는 수정하겠다 인데요, view 를 생성할 때는 생략해도 됩니다.

AS 뒤에 서브쿼리를 이용해서 원하는 행을 잘라서 옵니다.

 

※ 주의 - 여러개의 속성을 가지는 값(함수)은 AS를 사용 해주어야 합니다.

※ ex ) first_name || ' ' || last_name , 그룹함수, CONCAT 등등....

 

만든 뷰를 확인하는 방법은 SELECT 를 사용하면 됩니다.

복합뷰

복합뷰는 원본 테이블이 여러개 인 것을 의미합니다.

 

서브쿼리에 여러개의 테이블들의 속성(Column)을 가지도록 해주면 됩니다.

JOIN을 사용해서 여러개의 테이블의 속성들을 가져왔습니다.

 

뷰의 장점은 지금 위의 서브쿼리문을 "하나의 가상 테이블로 만들어 준 다는 것" 입니다.

그래서, 뷰에 바로 조건이나 정렬을 사용해주면 됩니다.

 

뷰를 만들지 않고, 정렬을 한다고 생각해 보시면... 끔찍하죠? 매번 뭐 해줄때마다 조인을 해야 됩니다.

그런데, 뷰가 있으면? 그냥 뷰만 써주면 되잔아요 ㅎㅎ

 

뷰의 수정

뷰를 수정하는 건, 만들 때와 똑같이 해주면 됩니다.

OR REPLACE 를 붙여서.

※ 뷰를 적절하게 사용하면, 복잡한 SQL문을 간단하게 변경할 수 있다는게 가장 큰 장점 입니다 !

뷰의 삭제

뷰를 삭제할 때는, DROP VIEW 를 써주면 됩니다.

뷰에 데이터 추가

뷰에 데이터를 추가할 경우, 원본 테이블에도 반영이 되는데요.

뷰는 데이터를 추가하기가 까다롭습니다.

 

- 원본 테이블에 NOT NULL 속성이 있었다면, 해당하는 속성을 뷰가 가지고 있어야 합니다.

- 복합뷰의 경우에는 여러개의 테이블에 한번에 데이터를 추가할 수 없기 때문에 불가능 합니다.

 

뷰에 제약 조건 추가

뷰를 만들 때, 뷰에 제약 조건을 줄 수 있습니다.

 

- with check option -> where절 컬럼의 수정을 막는 제약

생성

수정

- with read only -> 오직 SELECT만 사용 가능

 

★ 뷰의 규칙 정리 ★

- 단순 뷰에서 DML연산을 수행할 수 있다

- 뷰가 그룹함수, GROUP BY, DISTINCT 를 포함한다면 행을 제거할 수 없다.

- 뷰가 위의 행 제거 할수 없는 조건과, 표현식으로 정의된 열, ROWNUM 의사열은 수정할 수 없다.

- 뷰가 위의 행제거 와 수정할 수 없는 조건, 뷰에 의해 선택되지 않은 NOT NULL 열이 기본 테이블에 있을 때는 삭제할 수 없다.

 

뷰는 가상테이블 이기 때문에, 만든 뷰를 FROM 에 넣어도 됩니다. 굳이 그렇게 하진 않고 인라인 뷰를 사용합니다.

저희가 서브쿼리로 사용하던 "인라인 뷰" 도 "뷰" 입니다. 

 

이렇게, 뷰에 대해서 알아 보았습니다.

 

고생하셨습니다.

'Oracle 공부' 카테고리의 다른 글

Day38 - index  (0) 2021.04.08
Day38 - squence  (0) 2021.04.08
Day37 - 제약조건  (0) 2021.04.07
Day37 - DDL (테이블 생성, 테이블 변경, 테이블 삭제)  (0) 2021.04.07
Day37 - TCL ( COMMIT, ROLLBACK, SAVEPOINT)  (0) 2021.04.07