MySQL에서 특정 열의 값이 '0'일 경우, 같은 행에 있는 다른 열의 값을 대신 가져와야 하는 경우가 종종 있습니다. 이럴 때 IF() 함수를 사용하면 간단하게 해결할 수 있습니다.
IF() 함수 기본 문법
IF() 함수는 첫 번째 인자로 주어진 조건을 평가합니다. 조건이 참(true)이면 두 번째 인자를 반환하고, 거짓(false)이면 세 번째 인자를 반환합니다. 즉, 첫 번째 열의 값이 0이면 두 번째 열의 값을, 그렇지 않으면 첫 번째 열의 값을 그대로 출력하게 됩니다.
select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName
from yourTableName;
예제 테이블 생성
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table demo30
-> (
-> id int not null auto_increment primary key,
-> value int,
-> original_value int
-> )
-> ;
Query OK, 0 rows affected (1.87 sec)
데이터 삽입
insert 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into demo30(value,original_value) values(50,10);
Query OK, 1 row affected (0.10 sec)
mysql> insert into demo30(value,original_value) values(1000,0);
Query OK, 1 row affected (0.13 sec)
mysql> insert into demo30(value,original_value) values(0,40);
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo30(value,original_value) values(30,0);
Query OK, 1 row affected (0.09 sec)
테이블 데이터 확인
select 문으로 테이블의 레코드를 조회해 보겠습니다.
mysql> select *from demo30;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+-------+----------------+
| id | value | original_value |
+----+-------+----------------+
| 1 | 50 | 10 |
| 2 | 1000 | 0 |
| 3 | 0 | 40 |
| 4 | 30 | 0 |
+----+-------+----------------+
4 rows in set (0.00 sec)
값이 '0'일 때 다른 열 선택하기
다음은 MySQL에서 선택한 값(original_value)이 '0'일 때 다른 열(value)의 값을 대신 선택하는 쿼리입니다.
mysql> select id, if(original_value= 0,value,original_value) as Result
-> from demo30;
실행 결과는 아래와 같습니다.
+----+--------+
| id | Result |
+----+--------+
| 1 | 10 |
| 2 | 1000 |
| 3 | 40 |
| 4 | 30 |
+----+--------+
4 rows in set (0.00 sec)
결과 분석
출력 결과를 살펴보면 다음과 같은 규칙이 적용된 것을 확인할 수 있습니다.
- id 1: original_value가 10이므로 그대로 10이 출력됩니다.
- id 2: original_value가 0이므로 value인 1000이 대신 출력됩니다.
- id 3: original_value가 40이므로 그대로 40이 출력됩니다.
- id 4: original_value가 0이므로 value인 30이 대신 출력됩니다.
이처럼 IF() 함수를 활용하면 조건에 따라 다른 열의 값을 유연하게 선택할 수 있으며, CASE 표현식보다 더 간결한 코드로 동일한 로직을 구현할 수 있다는 장점이 있습니다.