MySQL에서 CASE WHEN 대신 IF() 함수 사용하기
MySQL에서는 IF() 함수를 CASE WHEN 구문의 대안으로 사용할 수 있습니다. 조건이 단순한 경우 IF() 함수를 활용하면 쿼리를 더 짧고 가독성 있게 작성할 수 있습니다. IF() 함수는 IF(조건식, 참일 때 값, 거짓일 때 값) 형태로 세 개의 인자를 받습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1593
-> (
-> PlayerScore int
-> );
Query OK, 0 rows affected (0.44 sec)
insert 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1593 values(78);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1593 values(0);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1593 values(89);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1593 values(0);
Query OK, 1 row affected (0.16 sec)
select 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1593;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------------+
| PlayerScore |
+-------------+
| 78 |
| 0 |
| 89 |
| 0 |
+-------------+
4 rows in set (0.00 sec)
IF() 함수를 활용한 조건부 출력
다음은 MySQL IF() 함수를 사용한 쿼리입니다. 점수가 0인 경우 빈 문자열('')을 반환하고, 그 외의 경우에는 원래 점수 값을 그대로 출력합니다.
mysql> select if(PlayerScore=0,'',PlayerScore) from DemoTable1593;
실행 결과는 다음과 같습니다.
+----------------------------------+
| if(PlayerScore=0,'',PlayerScore) |
+----------------------------------+
| 78 |
| |
| 89 |
| |
+----------------------------------+
4 rows in set (0.00 sec)
결과를 보면 점수가 0인 행은 빈 값으로 표시되고, 나머지 행은 실제 점수(78, 89)가 정상적으로 출력된 것을 확인할 수 있습니다. 이처럼 단순한 이분법적 조건 처리에는 IF() 함수가 CASE WHEN보다 간결하며, 여러 조건을 처리해야 하는 경우에만 CASE WHEN을 사용하는 것이 좋습니다.