MySQL에서 View(뷰)는 하나 이상의 테이블에서 데이터를 조회하는 데 사용되는 가상 테이블입니다. 실제로 데이터를 저장하지 않으며, 테이블에 정의된 SQL 쿼리의 결과를 기반으로 생성됩니다. View는 복잡한 쿼리를 단순화하거나 특정 사용자에게 필요한 데이터만 제공하는 데 주로 사용됩니다.
예시 코드에 사용될 테이블 생성 및 데이터를 삽입합니다.
아래 sql문을 복사하여 테이블 생성 및 데이터를 삽입해주세요.
CREATE TABLE Employee (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department_id INT,
salary DECIMAL(10, 2)
);
CREATE TABLE Department (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);
INSERT INTO Department (department_id, department_name) VALUES
(1, 'Sales'),
(2, 'HR'),
(3, 'IT');
INSERT INTO Employee (employee_id, first_name, last_name, department_id, salary) VALUES
(101, 'John', 'Doe', 1, 55000),
(102, 'Jane', 'Smith', 2, 60000),
(103, 'Emily', 'Johnson', 3, 75000),
(104, 'Michael', 'Brown', 1, 52000),
(105, 'Chris', 'Davis', 3, 80000);
CREATE VIEW
명령어를 통해 View를 생성할 수 있습니다.
구문
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
예시 코드
다음은 Sales_Employees
라는 View를 생성해 영업 부서에 속한 직원들의 정보를 조회하는 방법입니다.
CREATE VIEW Sales_Employees AS
SELECT e.first_name, e.last_name, d.department_name, e.salary
FROM Employee e
JOIN Department d ON e.department_id = d.department_id
WHERE d.department_name = 'Sales';
SELECT * FROM Sales_Employees;
first_name | last_name | department_name | salary | |
---|---|---|---|---|
John | Doe | Sales | 55000.00 | |
Michael | Brown | Sales | 52000.00 |
복합 뷰는 여러 테이블을 조인하고 서브쿼리 등을 사용하는 복잡한 View입니다.
구문
CREATE VIEW view_name AS
SELECT column1, column2, aggregate_function(column3), ...
FROM table1
JOIN table2 ON table1.column = table2.column
WHERE condition
GROUP BY column1, column2
ORDER BY column1;
예시 코드
각 부서의 직원 수와 평균 급여를 계산하는 복합 View 생성
CREATE VIEW Department_Stats AS
SELECT d.department_name, COUNT(e.employee_id) AS employee_count, ROUND(AVG(e.salary),2) AS avg_salary
FROM Employee e
JOIN Department d ON e.department_id = d.department_id
GROUP BY d.department_name;
SELECT * FROM Department_Stats;
department_name | employee_count | avg_salary | |
---|---|---|---|
Sales | 2 | 53500.00 | |
HR | 1 | 60000.00 | |
IT | 2 | 77500.00 |
ALTER VIEW
명령어를 통해 뷰의 정의를 수정할 수 있습니다.
구문
ALTER VIEW view_nameAS
SELECT column1, column2, ...
FROM table_name;
예시 코드
Sales 부서에서 급여가 55,000 이상인 직원만 포함하도록 View를 수정합니다.
ALTER VIEW Sales_Employees AS
SELECT e.employee_id, e.first_name, e.last_name, d.department_name, e.salary
FROM Employee e
JOIN Department d ON e.department_id = d.department_id
WHERE d.department_name = 'Sales' AND e.salary >= 55000;
SELECT * FROM Sales_Employees;
first_name | last_name | department_name | salary | employee_id | |
---|---|---|---|---|---|
John | Doe | Sales | 55000.00 | 101 |
기존에 존재하는 뷰를 새로운 뷰로 대체할 때는 CREATE OR REPLACE VIEW
명령어를 사용합니다.
이 명령어는 기존 View를 삭제하고 새로운 정의로 대체합니다.
해당 뷰가 존재하지 않으면 CREATE VIEW 문과 같은 결과를 반환합니다.
구문
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
예시 코드
Sales 부서에서 급여가 55,000 이상인 직원만 포함하도록 기존 View를 삭제하고 새로운 View로 대체합니다.
CREATE OR REPLACE VIEW Sales_Employees AS
SELECT e.first_name, e.last_name, d.department_name, e.salary
FROM Employee e
JOIN Department d ON e.department_id = d.department_id
WHERE d.department_name = 'Sales' AND e.salary >= 55000;
SELECT * FROM Sales_Employees;
first_name | last_name | department_name | salary | |
---|---|---|---|---|
John | Doe | Sales | 55000.00 |
View가 더 이상 필요하지 않으면 DROP VIEW
명령어를 사용하여 삭제할 수 있습니다.
구문
DROP VIEW view_name
예시 코드
Sales_Employees View를 삭제합니다.
DROP VIEW Sales_Employees;
MySQL의 View는 복잡한 쿼리의 단순화, 데이터 보안 강화, 유지보수 편의성 등을 제공합니다. 하지만 성능 저하, 인덱스 제약, 제한적인 쓰기 작업 등의 단점도 고려해야 합니다. 복합 View를 사용하면 다양한 테이블을 조인하고 집계하여 더 복잡한 데이터를 조회할 수 있습니다.