IS NULL 속성으로 NULL 값만 교체하기
MySQL에서 테이블에 저장된 NULL 값을 원하는 문자열로 바꾸고 싶다면 IS NULL 속성을 활용하면 됩니다. IS NULL은 해당 컬럼의 값이 NULL인 경우에만 조건을 만족하므로, 일반 데이터는 그대로 유지한 채 NULL 값만 선택적으로 교체할 수 있습니다.
실제 동작 과정을 예제와 함께 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Name varchar(100)
);
Query OK, 0 rows affected (0.53 sec)2단계: 데이터 삽입
insert 명령을 사용하여 이름 값과 NULL 값을 번갈아 가며 레코드를 삽입합니다.
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(null);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(null);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.18 sec)3단계: 현재 데이터 확인
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------+ | Name | +--------+ | Robert | | NULL | | David | | NULL | | Robert | +--------+ 5 rows in set (0.00 sec)
4단계: NULL 값 교체 쿼리 실행
테이블의 NULL 값만 교체하는 쿼리는 다음과 같습니다.
mysql> update DemoTable set Name=IF(Name IS NULL,'Please Enter a Name',Name); Query OK, 2 rows affected (0.09 sec) Rows matched: 5 Changed: 2 Warnings: 0
여기서 사용된 IF() 함수는 첫 번째 인수의 조건식을 평가합니다. 즉, Name IS NULL이 참이면 'Please Enter a Name' 문자열을 반환하고, 거짓이면 기존의 Name 값을 그대로 유지합니다. 실행 결과를 보면 전체 5개 행 중 실제로 변경된 행은 2개(Changed: 2)로, NULL 값만 교체되었음을 확인할 수 있습니다.
5단계: 변경 결과 확인
테이블의 레코드를 다시 한번 조회해 보겠습니다.
mysql> select *from DemoTable;
NULL 값이 지정한 문자열로 성공적으로 교체된 것을 확인할 수 있습니다.
+---------------------+ | Name | +---------------------+ | Robert | | Please Enter a Name | | David | | Please Enter a Name | | Robert | +---------------------+ 5 rows in set (0.00 sec)
참고: COALESCE 함수를 활용한 대체 방법
IF() 함수 외에도 COALESCE() 함수를 사용하면 더 간결하게 NULL 값을 교체할 수 있습니다. COALESCE는 인수 목록에서 처음으로 NULL이 아닌 값을 반환하는 함수입니다.
mysql> update DemoTable set Name=COALESCE(Name,'Please Enter a Name');
Name 값이 NULL이 아니면 Name을 그대로 반환하고, NULL이면 두 번째 인수인 대체 문자열을 반환하므로 위의 IF() 함수와 동일한 결과를 얻을 수 있습니다.