이전 포스트:
2025.02.16 - [자격증/SQLD] - [SQLD] 4-1: 서브쿼리 (Subquery)
SQLD Chapter 4-2: 뷰 (View)
1. 뷰(View)란?
뷰(View)는 SQL에서 사용하는 가상의 테이블로, 하나 이상의 테이블을 기반으로 생성됩니다. 실제 데이터를 저장하지 않으며, 쿼리를 통해 동적으로 데이터를 가져오는 방식으로 작동합니다.
1.1 뷰의 특징
- 가상 테이블: 실제 데이터를 저장하지 않고, 원본 테이블을 참조하여 동적으로 데이터를 조회
- 보안성 향상: 특정 컬럼이나 행만 포함하도록 제한하여 민감한 데이터 접근을 제어 가능
- SQL 재사용 가능: 복잡한 쿼리를 뷰로 정의하면 여러 번 재사용할 수 있어 코드의 가독성이 증가
- 독립성 유지: 원본 테이블의 구조가 변경되더라도, 뷰를 사용하면 애플리케이션에 영향을 최소화할 수 있음
3가지 키워드
- 독립성: 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.
- 편리성: 복잡한 질의를 뷰로 생성하여 관련 질의를 단순하게 작성할 수 있다. 또한 해당 형태의 SQL을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다.
- 보안성: 직원 급여정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성하여 사용자에게 정보를 감출 수 있다.
2. 뷰 생성 및 사용
뷰를 생성하는 기본적인 SQL 문법은 다음과 같습니다.
CREATE VIEW 뷰이름 AS
SELECT 열1, 열2, ... FROM 원본테이블
WHERE 조건;
예제: 직원 정보 뷰 생성
EMPLOYEES 테이블
EMPLOYEE_ID | EMPLOYEE_NAME | DEPARTMENT_ID | SALARY |
1 | 홍길동 | 10 | 3000 |
2 | 김철수 | 20 | 4500 |
3 | 이영희 | 10 | 6000 |
4 | 박민수 | 30 | 7000 |
CREATE VIEW IT_EMPLOYEES AS
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 10;
뷰를 활용한 데이터 조회
SELECT * FROM IT_EMPLOYEES;
결과
EMPLOYEE_ID | EMPLOYEE_NAME | SALARY |
1 | 홍길동 | 3000 |
3 | 이영희 | 6000 |
✅ 설명
- IT_EMPLOYEES 뷰를 생성하여 DEPARTMENT_ID가 10인 직원들만 포함
- 실제 EMPLOYEES 테이블을 직접 조회하지 않고, 뷰를 통해 필터링된 데이터를 간편하게 조회
3. 뷰의 활용
뷰는 다양한 방식으로 활용될 수 있습니다.
3.1 특정 컬럼 제한
뷰를 사용하면 테이블의 특정 컬럼만 노출할 수 있습니다.
EMPLOYEES 테이블
EMPLOYEE_ID | EMPLOYEE_NAME | DEPARTMENT_ID | SALARY |
1 | 홍길동 | 10 | 3000 |
2 | 김철수 | 20 | 4500 |
3 | 이영희 | 10 | 6000 |
4 | 박민수 | 30 | 7000 |
CREATE VIEW EMPLOYEE_NAMES AS
SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES;
뷰를 활용한 데이터 조회
SELECT * FROM EMPLOYEE_NAMES;
결과
EMPLOYEE_ID | EMPLOYEE_NAME |
1 | 홍길동 |
2 | 김철수 |
3 | 이영희 |
4 | 박민수 |
✅ 설명
- EMPLOYEE_NAMES 뷰를 생성하여 EMPLOYEES 테이블의 EMPLOYEE_ID와 EMPLOYEE_NAME 컬럼만 포함
3.2 복잡한 쿼리 단순화
뷰는 복잡한 SQL 쿼리를 단순화하는 데 유용합니다.
CREATE VIEW HIGH_SALARY_EMPLOYEES AS
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY > 5000;
뷰를 활용한 데이터 조회
SELECT * FROM HIGH_SALARY_EMPLOYEES;
결과
EMPLOYEE_ID | EMPLOYEE_NAME | SALARY |
3 | 이영희 | 6000 |
4 | 박민수 | 7000 |
✅ 설명
- HIGH_SALARY_EMPLOYEES 뷰를 사용하여 급여가 5000 이상인 직원만 조회
- 복잡한 WHERE 조건을 매번 작성할 필요 없이, 뷰를 사용하여 간편하게 조회 가능
4. 뷰 수정 및 삭제
뷰는 필요에 따라 수정 및 삭제할 수 있습니다.
4.1 뷰 수정 (ALTER VIEW)
CREATE OR REPLACE VIEW IT_EMPLOYEES AS
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 10;
✅ CREATE OR REPLACE VIEW를 사용하면 기존 뷰를 덮어쓸 수 있습니다.
4.2 뷰 삭제 (DROP VIEW)
DROP VIEW IT_EMPLOYEES;
✅ DROP VIEW를 사용하면 뷰가 삭제됩니다.
5. Materialized View (머티리얼라이즈드 뷰)
일반적인 뷰는 데이터를 실시간으로 조회하지만, 머티리얼라이즈드 뷰(Materialized View)는 실제 데이터를 저장하여 성능을 향상시킵니다.
CREATE MATERIALIZED VIEW HIGH_SALARY_EMPLOYEES AS
SELECT * FROM EMPLOYEES WHERE SALARY > 5000;
✅ 머티리얼라이즈드 뷰는 미리 결과를 저장하여 성능을 최적화할 수 있음
6. 인라인 뷰 (Inline View)란?
인라인 뷰(Inline View) = 동적 뷰(Dynamic View) = FROM 절에서 사용하는 서브 쿼리
인라인 뷰(Inline View)는 FROM 절에서 서브쿼리를 사용하여 임시적인 테이블(가상 테이블)을 생성하는 기법입니다.
즉, 일반적인 서브쿼리가 WHERE 절에서 조건을 제공하는 반면, 인라인 뷰는 FROM 절에서 사용되어 메인 쿼리의 테이블처럼 작동합니다.
✅ 인라인 뷰의 특징
- FROM 절에서 서브쿼리를 사용하여 임시 테이블을 생성
- 실행 중에만 존재하며, 물리적으로 저장되지 않음
- 서브쿼리의 결과를 메인 쿼리에서 다시 필터링하거나 정렬할 수 있음
- 복잡한 쿼리를 단순하게 만들고 가독성을 높이는 역할
🔹 예제 1: 부서별 최고 급여 직원 조회
EMPLOYEES 테이블
EMPLOYEE_ID | EMPLOYEE_NAME | DEPARTMENT_ID | SALARY |
1 | 홍길동 | 10 | 3000 |
2 | 김철수 | 20 | 4500 |
3 | 이영희 | 10 | 6000 |
4 | 박민수 | 30 | 7000 |
SELECT EMPLOYEE_NAME, SALARY, DEPARTMENT_ID
FROM (SELECT EMPLOYEE_NAME, SALARY, DEPARTMENT_ID,
RANK() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) AS RANKING
FROM EMPLOYEES) AS TEMP
WHERE RANKING = 1;
EMPLOYEE_NAME | SALARY | DEPARTMENT_ID |
이영희 | 6000 | 10 |
최지훈 | 5500 | 20 |
박민수 | 7000 | 30 |
✅ 설명
- 인라인 뷰 (서브쿼리):
- RANK() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC)를 사용해 부서별 급여 순위를 매김
- 메인 쿼리:
- WHERE RANKING = 1을 사용하여 부서별 최고 급여 직원만 조회
🔹 예제 2: 전체 직원 중 평균 급여보다 높은 직원 조회
SELECT EMPLOYEE_NAME, SALARY
FROM (SELECT EMPLOYEE_NAME, SALARY, (SELECT AVG(SALARY) FROM EMPLOYEES) AS AVG_SAL
FROM EMPLOYEES) AS TEMP
WHERE SALARY > AVG_SAL;
EMPLOYEE_NAME | SALARY |
이영희 | 6000 |
박민수 | 7000 |
최지훈 | 5500 |
✅ 설명
- 인라인 뷰에서 SELECT AVG(SALARY) FROM EMPLOYEES로 전체 평균 급여를 계산하여 각 행에 추가
- 메인 쿼리에서 SALARY > AVG_SAL 조건을 사용하여 평균 급여보다 높은 직원 조회
7. 마무리
이번 장에서는 뷰(View)의 개념, 생성, 활용 및 수정 방법을 학습했습니다.
✅ 뷰(View)는 가상의 테이블로서, 독립성, 편의성, 보안성이 보장됩니다.
✅ 동적 뷰(인라인 뷰)를 활용하면 FROM 절에서 서브쿼리를 사용하여 임시 테이블을 생성할 수 있습니다.
✅ 머티리얼라이즈드 뷰는 데이터를 물리적으로 저장하여 성능을 최적화하는 데 도움을 줍니다.
💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] 4-4 : 그룹(소계) 함수 및 집계 연산자 (0) | 2025.02.17 |
---|---|
[SQLD] 4-3: 집합 연산자 (Set Operators) (0) | 2025.02.17 |
[SQLD] 4-1: 서브쿼리 (Subquery) (0) | 2025.02.17 |
Part 4: SQL 활용 (Advanced SQL Usage) (0) | 2025.02.16 |
[SQLD] 3-3: 논리적 JOIN (조인)의 모든 것 (0) | 2025.02.16 |