[DB]SQL실무
[SQL]WITH 절
greeniti
2025. 3. 18. 20:49
WITH 절을 활용하여 여러 개의 테이블을 조인하는 예제를 살펴보겠습니다.
예제 시나리오
회사에서 직원 정보(employees), 부서 정보(departments), 급여 내역(salaries)을 관리하는 테이블이 있다고 가정합니다.
각 테이블을 조인하여 직원 이름, 부서 이름, 급여를 출력하는 SQL 쿼리를 작성해보겠습니다.
1. 테이블 및 데이터 생성
-- 직원 테이블
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department_id INT
);
INSERT INTO employees (id, name, department_id) VALUES
(1, 'Alice', 1),
(2, 'Bob', 2),
(3, 'Charlie', 1),
(4, 'David', 3),
(5, 'Eve', 2);
-- 부서 테이블
CREATE TABLE departments (
id INT PRIMARY KEY,
department_name VARCHAR(50)
);
INSERT INTO departments (id, department_name) VALUES
(1, 'HR'),
(2, 'IT'),
(3, 'Sales');
-- 급여 테이블
CREATE TABLE salaries (
employee_id INT PRIMARY KEY,
salary INT
);
INSERT INTO salaries (employee_id, salary) VALUES
(1, 5000),
(2, 7000),
(3, 6000),
(4, 4000),
(5, 5500);
2. WITH 절을 활용한 다중 테이블 조인
WITH emp_dept AS (
-- 직원과 부서 정보를 먼저 조인
SELECT e.id AS emp_id, e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id
), salary_info AS (
-- 직원과 급여 정보를 조인
SELECT s.employee_id, s.salary
FROM salaries s
)
-- 최종적으로 직원, 부서, 급여 데이터를 합침
SELECT ed.name, ed.department_name, si.salary
FROM emp_dept ed
JOIN salary_info si ON ed.emp_id = si.employee_id;
출력 결과
name department_name salary
Alice | HR | 5000 |
Bob | IT | 7000 |
Charlie | HR | 6000 |
David | Sales | 4000 |
Eve | IT | 5500 |
설명
- WITH emp_dept AS (...)
- employees와 departments 테이블을 조인하여 직원의 부서 정보를 가져옵니다.
- WITH salary_info AS (...)
- salaries 테이블에서 급여 정보를 가져옵니다.
- 메인 쿼리에서 emp_dept와 salary_info를 조인하여 최종 결과를 출력합니다.
이렇게 WITH 절을 사용하면 복잡한 쿼리를 모듈화하여 가독성을 높이고 유지보수성을 향상할 수 있습니다!