데이터베이스

데이터베이스 객체 - 뷰

야생늑대 2022. 4. 19. 20:42
반응형

① 뷰란?

  • 흔히 가상 테이블(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