MySQL에서 기존 열의 값을 기반으로 계산된 결과를 담는 임시 열(가상 열)을 추가하고 싶다면 CASE 문을 활용하면 됩니다. CASE 문은 조건을 설정하여 각 행마다 다른 값을 반환할 수 있어, 쿼리 결과에 새로운 파생 열을 만드는 데 매우 유용합니다.
예제 테이블 생성하기
먼저 예제로 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmployeeName varchar(20),
EmployeeSalary int,
EmployeeExperience int
);
Query OK, 0 rows affected (0.64 sec)위 테이블은 직원 ID, 이름, 급여, 경력 연수를 저장하는 구조입니다.
샘플 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 테이블에 추가합니다.
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Larry',4500,5);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Mike',130000,8);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Sam',11000,5);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Carol',140000,8) ;
Query OK, 1 row affected (0.18 sec)테이블 데이터 확인하기
SELECT 명령으로 저장된 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------------+--------------+----------------+--------------------+ | EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience | +------------+--------------+----------------+--------------------+ | 1 | Larry | 4500 | 5 | | 2 | Mike | 130000 | 8 | | 3 | Sam | 11000 | 5 | | 4 | Carol | 140000 | 8 | +------------+--------------+----------------+--------------------+ 4 rows in set (0.00 sec)
CASE 문으로 다른 열에 의존하는 임시 열 추가하기
이제 핵심 단계입니다. 아래 쿼리는 CASE 문을 사용하여 경력(EmployeeExperience) 값에 따라 급여가 조정된 결과를 담는 임시 열 NewSalary를 생성합니다.
mysql> select EmployeeId,EmployeeName,EmployeeSalary,EmployeeExperience, case when EmployeeExperience=5 then EmployeeSalary+10000 when EmployeeExperience=8 then EmployeeSalary+20000 else null end as NewSalary from DemoTable;
쿼리 로직을 살펴보면 다음과 같습니다.
- 경력이 5년인 직원 → 현재 급여에 10,000을 더한 값 반환
- 경력이 8년인 직원 → 현재 급여에 20,000을 더한 값 반환
- 그 외의 경우 → NULL 반환
실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
+------------+--------------+----------------+--------------------+-----------+ | EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience | NewSalary | +------------+--------------+----------------+--------------------+-----------+ | 1 | Larry | 4500 | 5 | 14500 | | 2 | Mike | 130000 | 8 | 150000 | | 3 | Sam | 11000 | 5 | 21000 | | 4 | Carol | 140000 | 8 | 160000 | +------------+--------------+----------------+--------------------+-----------+ 4 rows in set (0.00 sec)
결과를 보면 NewSalary 열이 실제 테이블에는 존재하지 않지만, 조회 시점에 다른 열의 값을 참조하여 동적으로 계산되어 출력되는 것을 확인할 수 있습니다. 이처럼 CASE 문과 AS 별칭을 함께 사용하면 원본 데이터를 변경하지 않고도 조건에 따른 파생 값을 손쉽게 조회할 수 있습니다.