MySQL에서 CASE WHEN 문이 예상대로 작동하지 않는 경우가 종종 있습니다. 대부분의 원인은 조건문의 문법 오류나 논리 구조의 잘못된 사용에 있습니다. 이 글에서는 CASE WHEN 문을 올바르게 사용하는 방법을 예제와 함께 자세히 살펴보겠습니다.
예제 테이블 생성하기
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table demo58 -> ( -> id int not null auto_increment primary key, -> first_name varchar(20), -> last_name varchar(20) -> ); Query OK, 0 rows affected (2.15 sec)
데이터 삽입하기
INSERT 명령어를 사용하여 테이블에 샘플 데이터를 추가합니다.
mysql> insert into demo58(first_name,last_name) values('John','Doe');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo58(first_name,last_name) values('David','Smith');
Query OK, 1 row affected (0.29 sec)
mysql> insert into demo58(first_name,last_name) values('John','Brown');
Query OK, 1 row affected (0.11 sec)
mysql> insert into demo58(first_name,last_name) values('David','Miller');
Query OK, 1 row affected (0.26 sec)
저장된 데이터 확인하기
SELECT 문으로 테이블에 저장된 레코드를 조회해 보겠습니다.
mysql> select * from demo58;
실행 결과는 다음과 같습니다.
+----+------------+-----------+ | id | first_name | last_name | +----+------------+-----------+ | 1 | John | Doe | | 2 | David | Smith | | 3 | John | Brown | | 4 | David | Miller | +----+------------+-----------+ 4 rows in set (0.15 sec)
CASE WHEN 표현식 사용하기
이제 CASE WHEN 절에 표현식을 적용한 쿼리를 실행해 보겠습니다.
mysql> select -> ( -> case -> when (first_name = "John") then 'Carol' -> when (last_name ="Smith") then 'Doe' -> end -> ) RESULT -> from demo58;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+--------+ | RESULT | +--------+ | Carol | | Doe | | Carol | | NULL | +--------+ 4 rows in set (0.00 sec)
결과 분석 및 주요 포인트
출력 결과를 보면 각 행마다 조건이 순서대로 평가되는 것을 확인할 수 있습니다.
- 1행: first_name이 'John'이므로 첫 번째 조건이 참이 되어 'Carol'이 반환됩니다.
- 2행: first_name은 'David'이지만 last_name이 'Smith'이므로 두 번째 조건이 참이 되어 'Doe'가 반환됩니다.
- 3행: first_name이 'John'이므로 'Carol'이 반환됩니다.
- 4행: 어떤 조건도 만족하지 않아 ELSE 절이 없는 경우 기본값인 NULL이 반환됩니다.
핵심 포인트: CASE WHEN 문은 위에서부터 순차적으로 조건을 평가하며, 가장 먼저 참이 되는 조건의 결과값을 반환합니다. 모든 조건이 거짓일 경우 ELSE 절이 정의되어 있지 않으면 NULL을 반환하므로, 상황에 따라 ELSE 절을 추가하여 기본값을 지정하는 것이 좋습니다. 또한 문자열 비교 시 따옴표 사용 규칙(작은따옴표 권장)을 준수하면 문법 오류를 예방할 수 있습니다.