가상 테이블
가상 테이블(Virtual Table)은 데이터베이스에서 실제로 데이터를 저장하지 않고,
다른 테이블이나 쿼리의 결과를 기반으로 동적으로 생성되어 사용되는 테이블입니다.
가상 테이블은 주로 뷰(View), 공통 테이블 식(CTE), 서브쿼리, 일시적인 테이블 등의 형태로 나타납니다.
가상 테이블을 만드는 주된 이유는 데이터 모델을 효과적으로 구성하고,
복잡한 쿼리를 단순화하며, 데이터에 대한 접근을 제어하거나 보안을 강화하는 데에 있습니다.
1. 가상 테이블 생성 이유
1. 복잡한 쿼리 단순화
가상 테이블을 사용하면 복잡한 쿼리를 간결하게 작성할 수 있습니다.
특히 여러 테이블 간의 조인이나 데이터 가공 작업을 수행할 때 편리합니다.
2. 데이터 모델링의 유연성
가상 테이블을 활용하면 데이터 모델을 더 유연하게 구성할 수 있습니다.
필요에 따라 데이터를 변환하거나 가공하여 새로운 정보를 생성할 수 있습니다.
3. 보안 및 권한 관리
가상 테이블을 사용하여 특정 사용자에게 일부 데이터만 노출하거나 특정 열에 대한 접근을 제한 가능
이는 데이터의 보안과 권한 관리를 강화하는 데 도움이 됩니다.
4. 쿼리의 재사용성
가상 테이블은 쿼리의 결과를 재사용할 수 있는 유용한 방법을 제공합니다.
여러 쿼리에서 동일한 데이터에 접근해야 할 때, 가상 테이블을 활용하여 중복 작업을 피할 수 있습니다.
2. 가상 테이블 생성 방법
1. 뷰(View) 생성
- CREATE VIEW를 사용하여 뷰를 생성합니다.
- 뷰는 하나 이상의 기본 테이블에서 데이터를 선택하여 가상의 테이블처럼 보여주는 쿼리 결과
- 뷰는 한 번 정의 후 재사용 가능, 자주 사용되는 쿼리를 간결하게 정의하고, 데이터를 쉽게 조회하도록 도와줌
# employees 테이블
+-------------+---------------+--------+
| employee_id | employee_name | salary |
|-------------|---------------|--------|
| 1 | John Doe | 50000 |
| 2 | Jane Smith | 60000 |
| 3 | Bob Johnson | 75000 |
+-------------+---------------+--------+
# 뷰(View) 생성
CREATE VIEW high_salary_employees AS
SELECT employee_id, employee_name
FROM employees
WHERE salary > 60000;
# 뷰(View)의 데이터 조회
SELECT *
FROM high_salary_employees;
2. 공통 테이블 식(CTE) 활용
- WITH 절을 사용하여 공통 테이블 식을 정의하고, 이를 활용하여 가상 테이블을 생성
- CTE는 임시적으로 쿼리 내에서만 사용되며, 쿼리가 끝나면 사라지는 가상 테이블
# employees 테이블
+-------------+---------------+--------+
| employee_id | employee_name | salary |
|-------------|---------------|--------|
| 1 | John Doe | 50000 |
| 2 | Jane Smith | 60000 |
| 3 | Bob Johnson | 75000 |
+-------------+---------------+--------+
# WITH절 사용
WITH high_salary_employees AS (
SELECT employee_id, employee_name
FROM employees
WHERE salary > 60000
)
# 가상 테이블 데이터 조회
SELECT *
FROM high_salary_employees;
3. 서브쿼리 활용
- 서브쿼리를 사용하여 가상 테이블을 생성
- 주로 FROM 절이나 SELECT 절에서 서브쿼리를 사용하여 원하는 데이터를 추출합니다.
# employees 테이블
+-------------+---------------+--------+
| employee_id | employee_name | salary |
|-------------|---------------|--------|
| 1 | John Doe | 50000 |
| 2 | Jane Smith | 60000 |
| 3 | Bob Johnson | 75000 |
+-------------+---------------+--------+
# 서브쿼리 활용
SELECT employee_id, employee_name
FROM (
SELECT * FROM employees
WHERE salary > 60000
) AS high_salary_employees;
4. 일시적인 테이블(Temporary Table) 생성
- CREATE TEMPORARY TABLE을 사용하여 일시적인 테이블을 생성
- 임시 테이블은 실제로 데이터를 저장하며, 해당 세션 동안만 유지되며 세션이 종료되면 자동으로 삭제
- 임시 테이블은 다른 세션에서는 접근X, 해당 세션 내에서만 유효
# employees 테이블
+-------------+---------------+--------+
| employee_id | employee_name | salary |
|-------------|---------------|--------|
| 1 | John Doe | 50000 |
| 2 | Jane Smith | 60000 |
| 3 | Bob Johnson | 75000 |
+-------------+---------------+--------+
# 임시 테이블 생성
CREATE TEMPORARY TABLE temp_high_salary_employees AS
SELECT employee_id, employee_name
FROM employees
WHERE salary > 60000;
본 게시글은 ChatGPT의 도움을 받아 작성하였습니다.
'Language > MySQL' 카테고리의 다른 글
Delete, Truncate, Drop (0) | 2024.01.09 |
---|---|
SQL 기본 명령어 (0) | 2024.01.08 |
SQL 윈도우 함수 (0) | 2024.01.06 |
CONCAT 함수 (0) | 2024.01.05 |
재귀 함수 (0) | 2024.01.04 |