① 뷰란?
- 흔히 가상 테이블(virtual table)로 부른다.
- 하나이상의 테이블을 조회하는 SELECT문을 저장한 객체를 뜻한다.
- 물리적 데이터를 따로 저장하지 않고 SELECT문을 저장
▶ SELECT문을 저장하여 서브쿼리처럼 사용할 수 있다.
② 뷰의 사용 목적(편리성)
▶ 많은 양의 SELECT문을 사용하고 거기에 여러 개의 결과 값을 조인하고 서브쿼리로 WHERE 조건식에도 사용한다면 전체 SELECT문은 훨씬 더 커지게 된다. 또한 이후 수정이 필요하거나 다른 개발자가 코드를 처음부터 파악해야 하는 경우에 적잖은 시간과 노력이 든다는 것도 생각해야한다. 이럴 때 자주 활용하는 SELECT문을 뷰로 저장해 놓은 후 다른 SQL문에서 활용하면 전체 SQL문의 복잡도를 완화하고 본래목적의 메인쿼리에 집중할 수 있어 편리하다.
③ 뷰의 사용 목적(보안성)
테이블의 특정 열을 노출하고 싶지 않을 경우
테이블에 주민번호나 개인정보같은 아무에게나 노출하기에는 예민한 데이터가 존재하는 경우 다른사용자에게 테이블의 전체 조회 권한을 부여하는 것은 데이터 보안에 위협이 될 수 있다.
이럴 때 테이블의 일부 데이터 또는 조인이나 여러함수 등으로 가공을 거친 데이터만 SELECT하는 뷰열람 권한을 제공하는 것이 불필요한 데이터 노출을 막을 수 있다.
④ 뷰생성
※ 우선 SYSTEM 계정으로 뷰생성 권한을 부여 해 주어야한다.
※ 기본형식
요소 | 설명 |
1 OR REPLACE | 같은 이름의 뷰가 이미 존재할 경우에 현재 생성할 뷰로 대체하여 생성( 선택 ) |
2 FORCE | 뷰가 저장할 SELECT문의 기반 테이블이 존재하지 않아도 강제로 생성( 선택 ) |
3 NO FORCE | 뷰가 저장할 SELECT문의 기반 테이블이 존재할 경우에만 생성 (기본값) ( 선택 ) |
4 뷰 이름 | 생성할 뷰 이름을 지정 (필수) |
5 열 이름 | SELECT문에 명시된 이름 대신 사용할 열 이름 지정 (생략 가능) ( 선택 ) |
6 저장 할 SELECT문 | 생성할 뷰에 저장할 SELECT문 지정 (필수) |
7 WITH CHECK OPTION | 지정한 제약 조건을 만족하는 데이터에 한해 DML 작업이 가능하도록 뷰 생성 ( 선택 ) |
8 WITH READ ONLY | 뷰의 열람, 즉 SELECT만 가능하도록 뷰 생성 ( 선택 ) |
CREATE VIEW VW_EMP20
AS (SELECT EMPNO, ENAME, JOB, DEPTNO
FROM EMP
WHERE DEPTNO = 20);
SELECT *
FROM VW_EMP20;
※ 생성한 뷰는 SELECT문의 FROM절에서 테이블처럼 지정하여 사용할 수 있다.
※ 여러 테이블을 조인하거나 서브쿼리를 사용한 좀 더 복잡적인 SELECT문도 뷰에 저장할 수 있다.
⑤ 뷰 삭제하기
DROP VIEW VW_EMP20;
※ 뷰는 실제 데이터가 아닌 SELECT문만 저장하므로 뷰를 삭제해도 테이블이나 데이터가 삭제되는 것은 아니다.
★ 뷰와 데이터 조작어
▶ 뷰에도 데이터 조작어를 직접 사용할 수 있는 경우가 있다. 하지만 여러가지 조건을 만족해야 하고 테이블 설계할 때 누락된 내용이 있으면 뷰를 통한 데이터 조작으로 인해 적합하지 않은 데이터가 생길 수도 있으므로 자주 사용하지 않는다. 이는 뷰의 주 목적이 물리적 데이터를 저장하지 않고 SELECT문만 저장함으로써 테이블의 데이터를 열람하는 것이기 때문이다. 데이터를 따로 저장하는 것이 허용되는 구체화 뷰(materialized view)도 존재한다.
⑥ 인라인 뷰를 사용한 TOP-N SQL 문
CREATE문을 통해 객체로 만들어지는 뷰 외에 SQL문에서 일회성으로 만들어서 사용하는 뷰를 인라인 뷰(inline view)라고 한다.
⑥-1 ROWNUM
ROWNUM은 의사 열 (pseudo column)이라고 하는 특수 열이다. 의사 열은 데이터가 저장되는 실제 테이블에 존재하지는 않지만 특정목적을 위해 테이블에 저장되어 있는 열처럼 사용 가능한 열을 뜻한다.
※ ROWNUM열 데이터 번호는 테이블에 저장된 행이 조회된 순서대로 매겨지는 일련번호이다.
▶ ORDER BY 내림차순 급여로 다시 조회하면 다음과 같이 나온다.
※ ROWNUM은 데이터를 하나씩 추가할 때 매겨지는 번호이므로 ORDER BY 절을 통해 정렬해도 유지 되는 특성이 있다.
⑥-2 인라인 뷰 같이 사용하기
※ ROWNUM에 인라인 뷰를 적용해서 정렬된 SELECT문의 결과 순번을 매겨서 출력할 수 있다.
▶ WHERE절로 원하는 데이터를 출력할수도 있다.
◎ 급여가 높은 상위 세명의 데이터만 출력하기
'데이터베이스' 카테고리의 다른 글
제약조건 - NOT NULL (0) | 2022.04.20 |
---|---|
제약조건 (0) | 2022.04.20 |
데이터베이스 객체 종류 - 인덱스 (0) | 2022.04.19 |
데이터베이스 객체 종류 - 데이터사전 (0) | 2022.04.19 |
세션과 읽기 일관성의 의미, LOCK (0) | 2022.04.18 |