Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL CASE 문 완벽 가이드: 작동 원리와 두 가지 문법 총정리

MySQL의 CASE 문은 프로그래밍 언어의 switch 문과 유사하게 작동합니다. 여러 조건을 순차적으로 평가하여 해당하는 결과값을 반환하는 제어 흐름 함수로, SELECT 문에서 조건별로 다른 값을 출력해야 할 때 매우 유용합니다.

CASE 문법 1 — 비교 조건문 방식

첫 번째 문법은 다양한 비교 조건을 평가하는 방식입니다. 각 WHEN 절에 비교문을 작성하고, 모든 조건이 거짓일 경우 ELSE 절의 기본값을 반환합니다.

Case
when anyCompareStatement then value1
when anyCompareStatement then value2
.
.
N
else anyValue
end as anyVariableName;

CASE 문법 2 — 단일 컬럼 값 비교 방식

두 번째 문법은 하나의 컬럼 값만 대상으로 조건을 비교할 때 사용합니다. 컬럼명을 CASE 바로 뒤에 지정하고, 각 WHEN 절에서 해당 컬럼의 값을 직접 비교합니다.

case yourColumnName
when condition1 then result1
when condition1 then result2
.
.
N
else anyValue
end;

CASE 문법 1 예제

위 개념을 이해하기 위해 간단한 SELECT 문을 실행해 보겠습니다.

다음 쿼리는 두 개의 조건을 평가합니다. 첫 번째 조건인 45 < 55가 참이므로 해당 결과가 반환됩니다.

mysql> select
-> case when 45 < 55 then '55 is greater than 45'
-> when 10!=11 then '10 is not equal to 11'
-> else 'Default case'
-> end as Result;

실행 결과

+-----------------------+
| Result |
+-----------------------+
| 55 is greater than 45 |
+-----------------------+
1 row in set (0.00 sec)

CASE 문은 위에서부터 순서대로 조건을 평가하며, 처음으로 참이 되는 조건의 값을 반환하고 나머지는 건너뜁니다. 따라서 첫 번째 조건이 이미 참이었기 때문에 두 번째 조건은 평가되지 않았습니다.

CASE 문법 2 예제

두 번째 문법을 실습하기 위해 테스트용 테이블을 생성하겠습니다.

테이블 생성 쿼리는 다음과 같습니다.

mysql> create table CaseDemo
-> (
-> Id int,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.93 sec)

INSERT 명령으로 샘플 데이터를 입력합니다.

mysql> insert into CaseDemo values(1,'John');
Query OK, 1 row affected (0.43 sec)

mysql> insert into CaseDemo values(2,'Sam');
Query OK, 1 row affected (0.16 sec)

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from CaseDemo;

실행 결과

+------+------+
| Id | Name |
+------+------+
| 1 | John |
| 2 | Sam |
+------+------+
2 rows in set (0.00 sec)

이제 단일 컬럼(Name)의 값만 비교하는 두 번째 형태의 CASE 쿼리를 실행해 보겠습니다.

mysql> select case name
-> when 'John' then 'His name is John'
-> when 'Sam' then 'His name is Sam'
-> else -1
-> end as Result
-> from CaseDemo;

실행 결과

+------------------+
| Result |
+------------------+
| His name is John |
| His name is Sam |
+------------------+
2 rows in set (0.00 sec)

정리

MySQL CASE 문은 크게 두 가지 방식으로 활용할 수 있습니다. 첫 번째는 case when 조건 then 값 형태로 다양한 비교 연산을 수행하는 방식이고, 두 번째는 case 컬럼명 when 값 then 결과 형태로 특정 컬럼의 값을 단순 매칭하는 방식입니다. 데이터를 조건에 따라 변환하거나 분류할 때 CASE 문을 활용하면 복잡한 로직을 SQL 내에서 손쉽게 처리할 수 있습니다.