MySQL에서 특정 컬럼의 NULL 값만 다른 값으로 바꾸고 싶다면 IFNULL() 함수와 UPDATE ... SET 구문을 함께 사용하면 됩니다. IFNULL(값, 대체값)은 첫 번째 인자가 NULL일 때 두 번째 인자로 지정한 값을 반환하고, NULL이 아니면 원래 값을 그대로 유지합니다.
실제 동작 과정을 예제와 함께 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 정수 타입 컬럼 하나를 가진 테이블을 만들어 보겠습니다.
mysql> create table DemoTable817(Value int); Query OK, 0 rows affected (0.53 sec)
2. 샘플 데이터 삽입
일반 숫자 값과 NULL 값이 섞여 있도록 레코드를 삽입합니다.
mysql> insert into DemoTable817 values(10); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable817 values(null); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable817 values(20); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable817 values(null); Query OK, 1 row affected (0.11 sec)
3. 현재 데이터 확인
SELECT 문으로 테이블 전체를 조회하면 다음과 같습니다.
mysql> select *from DemoTable817;
+-------+ | Value | +-------+ | 10 | | NULL | | 20 | | NULL | +-------+ 4 rows in set (0.00 sec)
4. NULL 값만 업데이트하기
핵심 쿼리입니다. SET 절에서 IFNULL(Value, 0)을 사용하면 NULL인 행만 0으로 변경되고, 이미 값이 있는 행(10, 20)은 그대로 유지됩니다.
mysql> update DemoTable817 set Value=IFNULL(Value,0); Query OK, 2 rows affected (0.17 sec) Rows matched: 4 Changed: 2 Warnings: 0
실행 결과를 보면 전체 4개 행 중 실제로 변경된 것은 2개 행(NULL → 0)임을 알 수 있습니다.
5. 결과 재확인
다시 조회해 보면 NULL 값이 모두 0으로 바뀐 것을 확인할 수 있습니다.
mysql> select *from DemoTable817;
+-------+ | Value | +-------+ | 10 | | 0 | | 20 | | 0 | +-------+ 4 rows in set (0.00 sec)
참고: COALESCE 함수도 사용 가능
COALESCE(Value, 0)도 동일한 결과를 얻을 수 있습니다. COALESCE는 인자 목록에서 처음으로 NULL이 아닌 값을 반환하는 표준 SQL 함수이므로, 여러 개의 대체 값을 순차적으로 검사해야 하는 경우에는 COALESCE가 더 유연하게 활용됩니다.