MySQL에서 NULL 값이 포함된 컬럼끼리 산술 연산을 수행하면 결과가 항상 NULL이 되어 버립니다. 이러한 문제를 해결하려면 IFNULL() 함수를 사용하여 NULL 값을 다른 값(예: 0)으로 대체한 뒤 계산하는 것이 효과적입니다.
IFNULL() 함수란?
IFNULL() 함수는 첫 번째 인자의 값이 NULL이 아니면 그 값을 그대로 반환하고, NULL이면 두 번째 인자로 지정한 대체 값을 반환합니다. 따라서 NULL이 포함된 데이터의 합계나 평균 등을 정확하게 구할 때 매우 유용합니다.
예제 테이블 생성
먼저 두 개의 int 타입 컬럼을 가진 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1462
-> (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (0.55 sec)
데이터 삽입
insert 명령을 사용하여 NULL 값이 포함된 레코드들을 삽입합니다.
mysql> insert into DemoTable1462 values(10,20);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1462 values(50,NULL);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1462 values(NULL,70);
Query OK, 1 row affected (0.25 sec)
저장된 데이터 확인
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1462;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 10 | 20 |
| 50 | NULL |
| NULL | 70 |
+--------+--------+
3 rows in set (0.00 sec)
IFNULL()을 사용한 산술 연산
다음은 NULL과 NON-NULL 값이 섞여 있는 컬럼에 대해 IFNULL() 함수를 적용하여 덧셈 연산을 수행하는 쿼리입니다.
mysql> select ifnull(Value1,0)+ifnull(Value2,0) from DemoTable1462;
실행 결과는 다음과 같습니다.
+-----------------------------------+
| ifnull(Value1,0)+ifnull(Value2,0) |
+-----------------------------------+
| 30 |
| 50 |
| 70 |
+-----------------------------------+
3 rows in set (0.00 sec)
결과 분석
각 행의 결과를 살펴보면 다음과 같습니다.
- 첫 번째 행: 10 + 20 = 30 (두 값 모두 NULL이 아님)
- 두 번째 행: 50 + 0 = 50 (Value2의 NULL이 0으로 대체됨)
- 세 번째 행: 0 + 70 = 70 (Value1의 NULL이 0으로 대체됨)
만약 IFNULL() 없이 단순히 Value1 + Value2로 연산했다면, NULL이 포함된 두 번째와 세 번째 행의 결과는 모두 NULL로 출력되었을 것입니다. 이처럼 IFNULL() 함수를 활용하면 NULL 값을 안전하게 처리하면서 원하는 산술 연산 결과를 얻을 수 있습니다.