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

MySQL SELECT 쿼리에서 개별 필드 값에 키를 매핑하는 방법 – CASE 문과 IF() 함수 완벽 가이드

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() 함수는 단순한 이진 조건(참/거짓) 처리 시 코드가 간결해지는 장점이 있습니다. 상황에 맞게 적절한 방식을 선택해 사용하면 됩니다.