반응형
9. 뷰 테이블
SQL 뷰 테이블 (View Table)
1. 뷰 테이블의 개념
- 뷰(View) 는 실제 데이터를 저장하지 않으며, SELECT 쿼리 결과를 가상 테이블 형태로 정의한 객체다.
- 복잡한 조인(Join)이나 서브쿼리를 자주 사용할 때, 이를 하나의 논리적 테이블로 재사용할 수 있도록 만들어준다.
- 뷰는 단순히 데이터를 보여주는 역할만 하므로, 데이터의 보안·관리 효율성을 높이는 데도 유용하다.
예시
CREATE VIEW CUSTOMER_INFO AS ( SELECT A.*, ORDER_DATE, ORDER_DETAIL_NO, QTY, PRICE, QTY * PRICE AS SALES_AMT FROM CUSTOMER AS A LEFT JOIN SALE AS B ON A.MEM_NO = B.MEM_NO LEFT JOIN SALE_DETAIL AS C ON B.ORDER_NO = C.ORDER_NO LEFT JOIN SERVICE AS D ON C.SERVICE_CODE = D.SERVICE_CODE LEFT JOIN HOTEL AS E ON D.HOTEL_CODE = E.HOTEL_CODE ); SELECT * FROM CUSTOMER_INFO;
→ 여러 테이블을 조합하여 CUSTOMER_INFO 라는 뷰를 생성
2. 뷰 테이블의 특징
- 가상 테이블이므로 실제 데이터를 중복 저장하지 않는다.
- 중복된 컬럼명은 허용되지 않으며, 필요한 경우 AS 별칭을 사용해 컬럼명을 변경해야 한다.
뷰는 쿼리 실행 시점에 생성되므로, 원본 테이블 데이터가 변경되면 뷰 결과도 즉시 반영된다.
중복 컬럼 처리 예시
CREATE VIEW CUSTOMER_INFO_ALL_TEST AS ( SELECT A.*, B.MEM_NO AS SALE_MEM_NO FROM CUSTOMER AS A LEFT JOIN SALE AS B ON A.MEM_NO = B.MEM_NO );
→ MEM_NO 컬럼이 중복되므로, SALE_MEM_NO로 별칭 지정
3. 뷰 테이블의 활용
뷰는 복잡한 조인을 단순화할 뿐 아니라, 데이터 분석용 마트(Data Mart) 로도 활용할 수 있다.
실습 ① SALE_MART_VIEW 생성
- 기준: SALE 테이블
- 조인 대상: SALE_DETAIL, SERVICE, HOTEL
- 추가 컬럼: QTY * PRICE AS SALES_AMT, DATE_FORMAT(ORDER_DATE, '%Y-%m') AS ORDER_DATE_YM
CREATE VIEW SALE_MART_VIEW AS ( SELECT A.*, ORDER_DETAIL_NO, QTY, TYPE, SERVICE_NAME, HOTEL, QTY * PRICE AS SALES_AMT, DATE_FORMAT(ORDER_DATE, '%Y-%m') AS ORDER_DATE_YM FROM SALE AS A LEFT JOIN SALE_DETAIL AS B ON A.ORDER_NO = B.ORDER_NO LEFT JOIN SERVICE AS C ON B.SERVICE_CODE = C.SERVICE_CODE LEFT JOIN HOTEL AS D ON C.HOTEL_CODE = D.HOTEL_CODE );
→ 실시간 데이터 기준의 분석용 뷰 생성
실습 ② NO_PURCHASE_VIEW 생성
- 주문 이력이 없는 회원 수 조회
CREATE VIEW NO_PURCHARSE_VIEW AS ( SELECT COUNT(DISTINCT A.MEM_NO) AS NO_PURCHARSE_MEM_NO_CNT FROM CUSTOMER AS A LEFT JOIN SALE AS B ON A.MEM_NO = B.MEM_NO WHERE B.MEM_NO IS NULL );
→ LEFT JOIN과 NULL 조건을 이용해 미구매 회원 식별
4. 뷰 테이블 코딩 테스트
① CUSTOMER_SALE_VIEW 생성
- CUSTOMER 기준 + SALE LEFT JOIN
- 중복 컬럼은 _V1 별칭 처리
CREATE VIEW CUSTOMER_SALE_VIEW AS (
SELECT A.*, ORDER_NO, B.MEM_NO AS MEM_NO_V1, ORDER_DATE
FROM CUSTOMER AS A
LEFT JOIN SALE AS B ON A.MEM_NO = B.MEM_NO
);
② INNER JOIN으로 수정
ALTER VIEW CUSTOMER_SALE_VIEW AS (
SELECT A.*, ORDER_NO, B.MEM_NO AS MEM_NO_V1, ORDER_DATE
FROM CUSTOMER AS A
INNER JOIN SALE AS B ON A.MEM_NO = B.MEM_NO
);
③ 생일이 이번 달인 회원 뷰 생성
CREATE VIEW CUSTOMER_BITRH_VIEW AS (
SELECT * FROM CUSTOMER AS A
WHERE MONTH(BIRTH_DATE) = MONTH(CURDATE())
);
→ CURDATE()와 MONTH()를 활용해 조회 시점 기준 조건 적용
* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
💡 생각 정리
이번 강의에서는 뷰(View)가 단순한 SQL 문법을 넘어, 데이터 재활용성과 분석 효율성을 높이는 설계 도구라는 점을 배웠다.
특히 여러 테이블을 반복적으로 조인해야 하는 상황에서, 뷰를 정의해두면 동일한 로직을 매번 작성하지 않아도 되므로 코드 유지보수성이 비약적으로 향상된다.
또한 뷰는 데이터 접근 권한 제어에도 매우 유용하다.
원본 테이블에 직접 접근할 필요 없이, 필요한 컬럼과 조건만 담은 뷰를 제공하면 데이터 보안과 업무 분리가 모두 가능하다는 점이 인상 깊었다.
마지막으로, 실습에서 확인한 것처럼 뷰는 생성 즉시 저장되는 것이 아니라 조회 시점에 실행되기 때문에, 항상 최신 데이터를 반영할 수 있다는 장점이 있다.
🚀 적용점
- 자주 사용하는 JOIN 쿼리를 CREATE VIEW로 등록해 반복 작업 최소화하기.
- 중복 컬럼 발생 시 AS 별칭을 반드시 지정하는 습관 들이기.
- 데이터 접근이 제한된 환경에서 뷰를 활용해 보안형 조회 구조 설계하기.
- ALTER VIEW 명령어로 LEFT ↔ INNER JOIN 등 구조 변경 실습하기.
- CURDATE()와 DATE_FORMAT()을 결합해 조회 시점 기준 조건형 뷰를 구현해보기.
👉 이번 강의는 SQL의 생산성을 극대화하는 “쿼리 재사용”의 개념을 정립하는 단계였다.
뷰를 잘 설계하면, 데이터 분석의 속도와 정확성을 동시에 높일 수 있다.
반응형
'데이터' 카테고리의 다른 글
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-11 (0) | 2025.10.10 |
|---|---|
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-10 (0) | 2025.10.09 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-8 (0) | 2025.10.07 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-7 (0) | 2025.10.06 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-6 (0) | 2025.10.05 |