뷰(VIEW)란 테이블처럼 사용 가능한 객체(조회, 입력, 수정, 삭제 가능)로, 테이블처럼 사용이 가능하니 JOIN도 가능하다.
데이터가 따로 저장공간에 저장되지 않는다(데이터가 저장되는 것이 아니라 객체 이름이 저장됨).
WITH문에서의 임시 테이블과 유사하나 영구적으로 사용 가능하도록 객체를 사용한다.
QUERY의 별칭(ALIAS)같은 느낌이며(쿼리 자체에 하나의 이름을 부여), 뷰를 조회하면 뷰와 연결된 쿼리를 그때그때 실행하기 때문에 원본 테이블이 변경되어도 변경된 결과를 그대로 조회할 수 있다.
WITH/뷰/테이블 공통점과 차이점
WITH문 뷰 테이블
임시적 영구적 영구적
(객체명 저장X) (CREATE 생성) (CREATE함)
데이터 저장X 데이터 저장X 데이터 저장O
1. 뷰 생성
**(컬럼1, 컬럼2, ....): 서브쿼리에서 생성된 각 컬럼 이름을 변경하여 뷰를 생성하려고 할 때
업무적으로 항상 JOIN하여 쓰는 데이터가 있는 경우, 원하는 JOIN 데이터 테이블을 생성해달라고 하면 100% 거절이라고 한다. 데이터 테이블이 생성되는 순간 용량이 발생하기 때문이고 그래서 용량 관리가 힘들기 때문이다.
그런데 뷰로 만들어달라고 하면 가능할 수도 있다고 한다. 물론 뷰도 관리가 어렵기 때문에 잘 만들어주진 않는다.
2. 종류
1) 단순뷰: 하나의 테이블 데이터로 뷰 구성
예) 학생 테이블에서 학번, 이름, 학년, 성별, 학과번호를 출력하는데 항상 이 집계만 사용하므로 이 데이터가 저장되어있으면 좋겠다 싶을 때 다음과 같이 사용한다.
이렇게 조회하면 테이블이 보이는데 왜 저장공간에 없는 것인가.
뷰는 객체 안에 쿼리가 저장되어있는 것이기 때문이다.
저 쿼리를 그때그때 실행하여 자료를 보여주는 것이기 때문에 실 데이터가 저장된 것이 아니다.
쿼리의 ALIAS 개념이다.
그럼 만일 원본 데이터가 바뀐다면(데이터가 삭제되거나 수정) 어떻게 되는가?
뷰의 동작 구조를 생각해보면 답이 나온다.
쿼리를 실행하는 것이므로 변경된 자료가 반영된 자료가 추출된다.
CTAS로 복제하는 경우 복제 시점의 데이터가 고정되는 거라 원본 데이터가 바뀌면 CTAS로 반영한 데이터는 변경되지 않으나 뷰는 반영된다.
2) 복합뷰: 여러 테이블의 데이터로 뷰 구성
예) 학생-성적 조인 결과 뷰 생성
그럼 데이터가 이렇게 출력된다.
그러면 위에서 생성된 뷰로 각 학생별로 같은 학년의 성적이 높은 친구수를 추출하면 다음과 같다.
3. 뷰 조회
뷰를 조회하는 방법은 아래와 같다.
위의 USER_VIEWS에 커서 올려두고 F4 누르면 저 UESR_VIEWS가 만들어진 쿼리를 볼 수 있다.
업무를 하는데 뷰 이름이 생각이 안나는 경우, 아래와 같이 검색하면 찾을 수 있다.
PRIVS 가 들어간 뷰 이름이 뭐였지.. 하면 이렇게! 선생님이 알려주신 팁이다.
연습문제를 풀어보자.
EMP에서 사번, 이름, 부서번호, 급여 정보만 조회 가능한 뷰를 생성하여라.
그리고 해당 뷰를 통해 새로운 사원 입력을 시도하여라.
그때 뷰와 실제 테이블에서 어떻게 보이는지 확인하자.
출력 결과는 안 올렸으나 VIEW_EMP와 EMP테이블 둘 다 KIM이 들어간 것을 확인할 수 있었다.
따라서 뷰에 반영한 자료도 실제 자료에 반영이 된다.
<DATA_DICTIONARAY VIEW>
DB 자체가 관리하는 뷰로, DB 생성 시 자동으로 생성된다.
오브젝트 및 자원(세션, 락)에 대한 현황을 관리하기 위하여 생성된 BASE TABLE은 따로 존재하며 사용자에게 뷰를 통해 정보를 제공한다.
BASE TABLE은 DBA권한을 가진 자도 수정, 삭제가 불가하다.
1. 종류 (시험에 나옴)
1) STATIC DATA DICTIONARY VIEW: 객체와 관련된 뷰로 객체 현황을 볼 수 있다(테이블, INDEX, 제약조건)
1-1) USER_XXX: 본인 소유 객체 정보
1-2) ALL_XXX: 본인이 사용 가능한 객체 정보
1-3) DBA_XXX: 전체 객체 정보
2) DYNAMIC PERFORMANCE VIEW: 자원현황 뷰(실시간 변동, 자원현황: 세션, 메모리 등)
- V$XXXXX
세션 현황 뷰를 확인해보자
내부에서 관리하는 세션도 다 보이며, 이런 식으로 확인 가능하다.
'배우기 > 복습노트[oracle sql]' 카테고리의 다른 글
[복습] SQL | Oracle 사용자 정책 만들기 PROFILE (0) | 2023.11.17 |
---|---|
[복습] SQL | Oracle 계정 생성하기(USER) (2) 이어서 (0) | 2023.11.17 |
[복습] SQL | Oracle 계정 생성하기(USER) + 복습후기(20231116) (0) | 2023.11.16 |
[복습] SQL | Oracle 권한에 대하여(GRANT, REVOKE) (0) | 2023.11.16 |
[복습] SQL | Oracle database간의 link인 DB Link (0) | 2023.11.16 |