VIEW
뷰는 다른 테이블에서 파생된 테이블이다. 물리적으로 데이터가 저장되는 것이 아니라,
논리적으로만 존재하며 뷰를 사용한 질의 시에는 DBMS에서 뷰 정의에 따라 질의를 재작성하여 수행한다.
VIEW의 장점
독립성 : 테이블 구조가 변경되어도 뷰를 사용하고 있는 응용 프로그램은 변경하지 않아도 된다
편리성 : 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해 놓으면, 추후 쿼리는 간단한 형태로 표현할 수 있다
보안성 : 사용자의 권한에 따라 열람 가능한 데이터를 다르게할 수 있다. 권한에 따라 확인 가능한 컬럼을 정의하여 뷰를 생성하면, 기본 테이블 노출 없이 접근 제어를 할 수 있다
VIEW의 특징
- 생성된 뷰는 또 다른 뷰를 생성하는데 사용될 수 있다 (뷰 테이블을 만든다면 추후 다른테이블에도 재사용 가능)
- 뷰의 정의는 변경할 수 없으며, 삭제 후 재생성이 필요하다 (뷰는 UPDATE가 불가하고, CREATE, UPDATE만 가능하다, REPLACE를 사용하면 DELETE 후 CREATE를 실행해 준다)
- 뷰를 통한 갱신에는 제약이 따른다. 갱신을 위해서는 기본적으로 원천 테이블의 기본키가 포함되어야 한다
- 원천이 되는 테이블이나 뷰가 삭제되면 이를 기반으로 하는 뷰도 함께 삭제된다.
VIEW 쿼리
# 같은 이름의 뷰가 존재하면 기존 뷰를 무시하고 대체
CREATE [OR REPLACE] VIEW view_name AS
# 뷰를 생성할 쿼리 구문
SELECT column1, column2, … FROM table_name
WHERE condition;
예시
이러한 테이블이 있다고 한다면
CREATE VIEW MEMBER_NAME AS # VIEW 정의
(SELECT ID, NAME # 진행되는 쿼리
FROM MEMBER);
EMPOLYEE 테이블과 DEPARTMENT 테이블이 있다면, 이 둘을 통해 함께 볼 수 있는 쿼리를 작성하고 뷰로 작성함
CREATE VIEW EMPLOYEE_FULL AS
(
SELECT E.ID AS EMPLOYEE_ID,
E.NAME AS EMPLOYEE_NAME, E.SALARY,
E.DEPARTMENT_ID,
D.NAME AS DEPARTMENT_NAME
FROM EMPLOYEE E
LEFT OUTER JOIN
DEPARTMENT D
ON E.DEPARTMENT_ID = D.ID );
VIEW 문제 풀이
EMPLOYEE 테이블을 이용하여 부서 이름이 ‘개발’인 직원들의 직원 ID, 급여 정보를 가진 뷰(EMPLOYEE_DEV) 를 만드는 쿼리를 작성
EMPLOYEE 테이블의 구조
- EMPLOYEE테이블에서 부서 이름(department_name)이 ‘개발’ 인 직원들의 직원 ID(employee_id), 급여(salary) 정보를 가지는 EMPLOYEE_DEV 뷰(View) 를 만드는 쿼리를 작성
- 1번에서 만든 EMPLOYEE_DEV 뷰에 대하여 뷰의 모든 데이터를 출력하는 쿼리를 작성
EMPOLYEE 테이블 구조
+-------------+-----------------+--------+
| employee_id | department_name | salary |
+-------------+-----------------+--------+
| 10000 | 영업 | 9000 |
| 10001 | 개발 | 8500 |
| 10002 | 개발 | 9000 |
| 10003 | 운영 | 7000 |
| 10004 | 기획 | 9500 |
| 10005 | 사업 | 7500 |
| 10006 | 영업 | 6000 |
| 10007 | 기획 | 10000 |
| 10008 | 사업 | 8000 |
| 10009 | 개발 | 9000 |
| 10010 | 개발 | 7500 |
+-------------+-----------------+--------+
-- 1. 부서이름이 '개발'인 직원의 직원ID, 급여 정보를 가지는 뷰(EMPLOYEE_DEV)를 만드는 쿼리를 작성
CREATE VIEW EMPLOYEE_DEV AS(
SELECT EMPLOYEE_id, salary
FROM EMPLOYEE
WHERE department_name = "개발"
);
-- 2. 위에서 만든 뷰(EMPLOYEE_DEV)의 모든 데이터를 조회하는 쿼리를 작성
SELECT * FROM EMPLOYEE_DEV;
'SQL 이것저것' 카테고리의 다른 글
[SQL] 그룹 함수 (0) | 2022.09.16 |
---|---|
[SQL] 윈도우 함수 (0) | 2022.09.14 |
[SQL] 서브쿼리 (0) | 2022.09.10 |
[SQL] JOIN (0) | 2022.08.30 |
[SQL] 계층형 질의 (0) | 2022.08.30 |