MySQL에서 0을 NULL로 바꾸는 방법
MySQL에서 제공하는 NULLIF() 함수를 사용하면 특정 컬럼의 값이 0일 때 이를 NULL로 손쉽게 변환할 수 있습니다. NULLIF()는 두 개의 인자를 받으며, 첫 번째 인자와 두 번째 인자가 같으면 NULL을 반환하고, 다르면 첫 번째 인자의 값을 그대로 반환합니다.
기본 문법
SELECT *, NULLIF(yourColumnName, 0) AS anyVariableName FROM yourTableName;
위 문법을 실제로 이해하기 위해 예제 테이블을 하나 만들어 보겠습니다.
1. 테이블 생성
다음 쿼리로 예제 테이블을 생성합니다.
mysql> create table Replace0WithNULLDemo
-> (
-> Id int NOT NULL auto_increment,
-> Name varchar(20),
-> Marks int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.53 sec)2. 데이터 삽입
이제 INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다. 일부러 점수(Marks)가 0인 레코드도 함께 넣었습니다.
mysql> insert into Replace0WithNULLDemo(Name, Marks) values('John', 76);
Query OK, 1 row affected (0.16 sec)
mysql> insert into Replace0WithNULLDemo(Name, Marks) values('Carol', 86);
Query OK, 1 row affected (0.20 sec)
mysql> insert into Replace0WithNULLDemo(Name, Marks) values('Sam', 0);
Query OK, 1 row affected (0.17 sec)
mysql> insert into Replace0WithNULLDemo(Name, Marks) values('Mike', 0);
Query OK, 1 row affected (0.16 sec)
mysql> insert into Replace0WithNULLDemo(Name, Marks) values('Larry', 98);
Query OK, 1 row affected (0.19 sec)
mysql> insert into Replace0WithNULLDemo(Name, Marks) values('Bob', 0);
Query OK, 1 row affected (0.17 sec)3. 현재 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from Replace0WithNULLDemo;
실행 결과는 다음과 같습니다.
+----+-------+-------+ | Id | Name | Marks | +----+-------+-------+ | 1 | John | 76 | | 2 | Carol | 86 | | 3 | Sam | 0 | | 4 | Mike | 0 | | 5 | Larry | 98 | | 6 | Bob | 0 | +----+-------+-------+ 6 rows in set (0.00 sec)
4. NULLIF()로 0을 NULL로 변환
이제 NULLIF() 함수를 적용하여 Marks 값이 0인 레코드를 NULL로 바꿔 보겠습니다.
mysql> select *, NULLIF(Marks, 0) as ReplaceZeroWithNULL from Replace0WithNULLDemo;
아래 출력 결과에서 볼 수 있듯이, 새로 생성된 ReplaceZeroWithNULL 컬럼에서 원래 0이었던 값이 모두 NULL로 표시됩니다.
+----+-------+-------+---------------------+ | Id | Name | Marks | ReplaceZeroWithNULL | +----+-------+-------+---------------------+ | 1 | John | 76 | 76 | | 2 | Carol | 86 | 86 | | 3 | Sam | 0 | NULL | | 4 | Mike | 0 | NULL | | 5 | Larry | 98 | 98 | | 6 | Bob | 0 | NULL | +----+-------+-------+---------------------+ 6 rows in set (0.00 sec)
정리
NULLIF(컬럼명, 0)은 해당 컬럼의 값이 0이면 NULL을 반환하고, 그 외의 경우에는 원래 값을 그대로 반환합니다. 이 방식은 실제 테이블의 데이터를 변경하지 않고 조회 결과에서만 0을 NULL로 처리하고 싶을 때 매우 유용합니다. 만약 테이블 자체의 데이터를 영구적으로 수정하고 싶다면 UPDATE 문과 함께 활용할 수 있습니다.