안녕하세요~
코딩하는 euni입니다!
오늘은 오라클 SQL view에 대해 알아보도록 하겠습니다!
뷰는 위의 그림처럼 가상!의 테이블입니다!
더 자세히 알아볼까요?
뷰는 데이터베이스 오브젝트 5가지 중 하나입니다.
VIEW란?
하나 이상의 테이블에 있는 데이터의 부분 집합을 나타낼 수 있는
논리적 테이블 입니다.
(다른 뷰를 기반으로 할 수 있습니다.)
뷰는 자체적으로 데이터를 갖고있지 않지만
테이블의 데이터를 보거나 변경 할 수있습니다.
그럼 뷰가 필요한 이유는 무엇일까요?
1. 보안상의 이유로 특정 데이터를 조회되지 않도록 하고 싶을 때 (데이터 엑세스 제한) 2. 복잡한 쿼리를 간단하게 조회하고 싶을 때
|
뷰에는 단순 뷰와 복합 뷰 두 가지 유형이 있습니다.
기능 |
단순 뷰 |
복합 뷰 |
테이블 수 |
1개 |
2개 이상 |
그룹 함수 포함 여부 |
포함하지 않음 |
포함 |
DML작업 가능 여부 |
가능 |
불가능할 수도 있음 |
뷰옵션 2가지
1. WITH CHECK OPTION : WHERE절에서 기술한 조건에 위배되게 VIEW를 수정하지 못한다.
2. WITH READ ONLY : VIEW 전체를 수정, 삭제, 입력이 불가한 상태로 만들겠다. |
그럼~ 오늘의 예제로 들어가 볼까요?
[ 고객 테이블 ]
고객이름 | 나이 | 주소 | 총구매액 | 전화번호 | 추천인 |
A | 24 | 서울 | 30000 | 010-0123-4567 | null |
B | 29 | 서울 | 10000 | 010-1234-5678 | A |
C | 26 | 파주 | 25000 | 010-2345-6789 | A |
D | 27 | 제주 | 1000 | 010-3456-7891 | B |
예제1. 서울에 사는 뷰(고객_서울)로 생성하고 싶습니다.
(단 전화번호는 중요한 정보로 이 뷰를 사용하는 사람이 볼 수 없게 해주세요.)
위와 같이 하나의 테이블을 기반으로 생성한 뷰를 단일 뷰라고 합니다.
특징: CREATE VIEW문에 subquery를 포함시킵니다.
참고: 하나의 테이블을 사용하여 view를 만들 때
group 함수를 포함한다면 복합뷰입니다!
뷰 수정 방법: create or replace view절을 사용하여
뷰를 삭제하고 다시 생성할 수 있습니다.
예제2. 고객_서울 뷰에서
고객 B의 총구매액을 20000으로 갱신하는 쿼리문을 작성해주세요
위의 결과는 고객_서울 뷰에 반영되었습니다.
그렇다면 고객 테이블에서는 고객 B의 총구매액이 20000으로 갱신될까요?
그 이유는 뷰는 데이터를 갖고있는 것이 아니고
논리적으로 존재하기 때문이죠.
또 다르게 생각해보면,
만약 뷰로 데이터를 갱신하지 못한다면
기반이 되는 기본 테이블로만 데이터 갱신이 가능하게 되고
새로운 테이블을 만드는 것과 다름이 없게됩니다.
동일한 데이터의 다른 뷰를 제공하는 것이 뷰의 또다른 장점입니다!
만약! 특정 VIEW의 데이터를 수정, 삭제, 입력을 불가능하게 하고싶다면?
이때 사용하는 것이 VIEW의 옵션 WITH READ ONLY입니다.
물론 권한을 주는 다른 SQL문도 존재합니다.
하지만
뷰를 생성하면서 데이터 손상을 막기위해
미리 제약을 두는 방법도 사용할 수 있답니다!
(WITH CHECK ONLY절도 위와 같은 방법으로 사용할 수 있습니다.)
오늘은 VIEW(뷰)에 대해 알아보았습니다.
데이터 검색 query의 성능을 향상시키려면 인덱스를 생성하는 것을 추천합니다!
내일은 인덱스로 찾아올께요~
'SQL' 카테고리의 다른 글
ORACLE | 치환변수(&) 사용하는 방법 (0) | 2018.04.16 |
---|---|
ORACLE | 인덱스 (INDEX) (2) | 2018.04.12 |
ORACLE | SQL제약조건(데이터 정제하기) (0) | 2018.04.10 |
ORACLE | MERGE문 (DML) (0) | 2018.04.09 |
ORACLE | 서브쿼리 2탄 - MULTIPLE COLUMN SUBQUERY (0) | 2018.04.06 |