Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 NULLIF() 함수를 사용해 0을 NULL로 변환하는 방법

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 문과 함께 활용할 수 있습니다.