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

MySQL에서 SELECT 조회 결과의 값을 다른 값으로 대체하는 방법 (CASE 문 활용)

MySQL에서 쿼리 결과로 반환되는 특정 컬럼의 값을 다른 값으로 바꿔서 출력하고 싶다면 SELECT CASE 문을 사용하면 됩니다. 예를 들어, 데이터베이스에는 0과 1로 저장되어 있지만 화면에는 'true' 또는 'false'처럼 사람이 읽기 쉬운 형태로 표시해야 하는 경우에 유용합니다.

CASE 문 기본 문법

SELECT yourColumnName1, yourColumnName2, ...N,
CASE WHEN yourColumnName = 1 THEN 'true'
ELSE 'false'
END AS anyVariableName
FROM yourTableName;

CASE 문은 조건을 평가한 후, 조건이 참이면 THEN 뒤의 값을, 그렇지 않으면 ELSE 뒤의 값을 반환합니다. END AS 뒤에는 결과를 담을 새로운 별칭(컬럼명)을 지정할 수 있습니다.

예제 테이블 생성

문법을 이해하기 위해 실습용 테이블을 먼저 만들어 보겠습니다. 아래 쿼리는 사용자 정보와 함께 18세 이상 여부를 tinyint 값으로 저장하는 테이블을 생성합니다.

mysql> CREATE TABLE selectReturnDemo
-> (
-> Id INT,
-> Name VARCHAR(100),
-> isGreaterthan18 TINYINT(1)
-> );
Query OK, 0 rows affected (0.62 sec)

샘플 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> INSERT INTO selectReturnDemo VALUES(1,'Carol',0);
Query OK, 1 row affected (0.23 sec)

mysql> INSERT INTO selectReturnDemo VALUES(2,'Bob',1);
Query OK, 1 row affected (0.21 sec)

mysql> INSERT INTO selectReturnDemo VALUES(3,'Mike',1);
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO selectReturnDemo VALUES(4,'David',0);
Query OK, 1 row affected (0.21 sec)

mysql> INSERT INTO selectReturnDemo VALUES(5,'Adam',1);
Query OK, 1 row affected (0.10 sec)

저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM selectReturnDemo;

실행 결과는 다음과 같습니다. 현재는 18세 이상 여부가 숫자 0과 1로만 표시됩니다.

+------+-------+-----------------+
| Id   | Name  | isGreaterthan18 |
+------+-------+-----------------+
| 1    | Carol | 0               |
| 2    | Bob   | 1               |
| 3    | Mike  | 1               |
| 4    | David | 0               |
| 5    | Adam  | 1               |
+------+-------+-----------------+
5 rows in set (0.00 sec)

CASE 문으로 값 대체하기

이제 CASE 문을 적용하여 1은 'true'로, 0은 'false'로 변환해서 출력해 보겠습니다.

mysql> SELECT Id, Name,
-> CASE WHEN isGreaterthan18 = 1 THEN 'true'
-> ELSE 'false'
-> END AS AgeIsGreaterthan18
-> FROM selectReturnDemo;

실행 결과는 다음과 같습니다. 원래 숫자였던 값이 의미 있는 문자열로 대체되어 출력된 것을 확인할 수 있습니다.

+------+-------+--------------------+
| Id   | Name  | AgeIsGreaterthan18 |
+------+-------+--------------------+
| 1    | Carol | false              |
| 2    | Bob   | true               |
| 3    | Mike  | true               |
| 4    | David | false              |
| 5    | Adam  | true               |
+------+-------+--------------------+
5 rows in set (0.00 sec)

정리 및 추가 팁

이처럼 SELECT CASE 문을 사용하면 원본 데이터는 그대로 유지하면서 조회 결과의 표시 값만 자유롭게 변경할 수 있습니다. 참고로 MySQL 8.0부터는 같은 기능을 수행하는 IF(expr1, expr2, expr3) 함수도 사용할 수 있습니다. 예를 들어 IF(isGreaterthan18 = 1, 'true', 'false')와 같이 작성하면 CASE 문보다 간결하게 처리할 수 있습니다. 조건이 두 개뿐이라면 IF 함수를, 세 가지 이상의 분기가 필요하다면 CASE 문을 사용하는 것이 좋습니다.