MySQL에서 SELECT 쿼리를 작성하다 보면 특정 필드의 저장된 값(예: 0 또는 1)을 사람이 읽기 쉬운 형태(예: 'ENABLED' 또는 'DISABLED')로 변환해 출력해야 하는 경우가 자주 있습니다. 이럴 때 CASE 문이나 IF() 함수를 사용하면 간단하게 해결할 수 있습니다.
1. CASE 문을 사용한 키 매핑
CASE 문을 활용하면 조건에 따라 필드 값을 원하는 문자열로 변환하여 조회할 수 있습니다. 기본 구문은 다음과 같습니다.
SELECT yourColumnName1, yourColumnName2, yourColumnName3, .........N,
(
CASE WHEN yourColumnName = 1 THEN 'ENABLED'
ELSE 'DISABLED'
END
) AS anyVariableName
FROM yourTableName;2. IF() 함수를 사용한 키 매핑
같은 결과를 더 간결하게 얻고 싶다면 IF() 함수를 사용할 수도 있습니다. IF() 함수는 첫 번째 인자가 참(1)이면 두 번째 인자를, 거짓(0)이면 세 번째 인자를 반환합니다.
SELECT yourColumnName1, yourColumnName2, yourColumnName3, .........N, IF(yourColumnName, 'ENABLED', 'DISABLED') AS anyVariableName FROM yourTableName;
3. 실습 예제: 테이블 생성하기
위 구문을 실제로 이해하기 위해 예제 테이블을 만들어 보겠습니다. 아래 쿼리로 MapKeys 테이블을 생성합니다.
mysql> create table MapKeys
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> isActive boolean,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.65 sec)다음으로 INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into MapKeys(Name,isActive) values('Larry',true);
Query OK, 1 row affected (0.13 sec)
mysql> insert into MapKeys(Name,isActive) values('David',false);
Query OK, 1 row affected (0.16 sec)
mysql> insert into MapKeys(Name,isActive) values('Mike',true);
Query OK, 1 row affected (0.14 sec)
mysql> insert into MapKeys(Name,isActive) values('Carol',false);
Query OK, 1 row affected (0.17 sec)
mysql> insert into MapKeys(Name,isActive) values('Sam',false);
Query OK, 1 row affected (0.15 sec)
mysql> insert into MapKeys(Name,isActive) values('Bob',true);
Query OK, 1 row affected (0.19 sec)4. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from MapKeys;
실행 결과는 다음과 같습니다. isActive 컬럼에는 1(true)과 0(false) 값이 저장되어 있는 것을 확인할 수 있습니다.
+----+-------+----------+ | Id | Name | isActive | +----+-------+----------+ | 1 | Larry | 1 | | 2 | David | 0 | | 3 | Mike | 1 | | 4 | Carol | 0 | | 5 | Sam | 0 | | 6 | Bob | 1 | +----+-------+----------+ 6 rows in set (0.00 sec)
5. CASE 문으로 키 매핑 실행하기
이제 CASE 문을 사용해 isActive 값을 'ENABLED' / 'DISABLED'로 변환해 보겠습니다.
mysql> select Id,Name,
-> (
-> CASE WHEN isActive = 1 THEN 'ENABLED'
-> ELSE 'DISABLED'
-> END
-> ) AS Status
-> from MapKeys;실행 결과는 다음과 같습니다. 숫자 값이 의미 있는 상태 문자열로 깔끔하게 변환되었습니다.
+----+-------+----------+ | Id | Name | Status | +----+-------+----------+ | 1 | Larry | ENABLED | | 2 | David | DISABLED | | 3 | Mike | ENABLED | | 4 | Carol | DISABLED | | 5 | Sam | DISABLED | | 6 | Bob | ENABLED | +----+-------+----------+ 6 rows in set (0.00 sec)
6. IF() 함수로 동일한 결과 얻기
IF() 함수를 사용하면 한 줄로 같은 결과를 얻을 수 있습니다.
mysql> select Id,Name,if(isActive,'ENABLED','DISABLED') as Status from MapKeys;
실행 결과는 다음과 같습니다.
+----+-------+----------+ | Id | Name | Status | +----+-------+----------+ | 1 | Larry | ENABLED | | 2 | David | DISABLED | | 3 | Mike | ENABLED | | 4 | Carol | DISABLED | | 5 | Sam | DISABLED | | 6 | Bob | ENABLED | +----+-------+----------+ 6 rows in set (0.00 sec)
정리
MySQL에서 SELECT 쿼리의 개별 필드 값에 키를 매핑하는 방법은 크게 두 가지입니다.
CASE 문은 여러 조건 분기가 필요할 때 유연하게 확장할 수 있어 복잡한 매핑 로직에 적합하고, IF() 함수는 단순한 이진 조건(참/거짓) 처리 시 코드가 간결해지는 장점이 있습니다. 상황에 맞게 적절한 방식을 선택해 사용하면 됩니다.