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

MySQL에서 SELECT 문으로 NULL 값 대체하는 방법 총정리: IFNULL(), COALESCE(), CASE 문

MySQL에서 SELECT 문을 사용해 NULL 값을 다른 값으로 대체하는 방법은 여러 가지가 있습니다. 대표적으로 CASE 문, IFNULL(), COALESCE() 세 가지 함수를 활용할 수 있습니다. 각 방법의 문법과 실제 사용 예제를 자세히 살펴보겠습니다.

1. IFNULL() 함수로 NULL 값 대체하기

IFNULL()은 첫 번째 인자가 NULL일 경우 두 번째 인자로 지정한 값을 반환하는 함수입니다.

기본 문법:

SELECT IFNULL(yourColumnName, 'yourValue') AS anyVariableName FROM yourTableName;

2. COALESCE() 함수로 NULL 값 대체하기

COALESCE()는 인자 목록 중 NULL이 아닌 첫 번째 값을 반환하는 표준 SQL 함수입니다. 두 개의 인자를 사용하면 IFNULL()과 동일하게 동작합니다.

기본 문법:

SELECT COALESCE(yourColumnName, 'yourValue') AS anyVariableName FROM yourTableName;

3. CASE 문으로 NULL 값 대체하기

CASE 문은 조건 분기를 통해 더 유연하게 NULL을 처리할 수 있습니다.

기본 문법:

SELECT CASE
    WHEN yourColumnName IS NULL THEN 'yourValue'
    ELSE yourColumnName
END AS anyVariableName FROM yourTableName;

실습 예제: 테이블 생성 및 데이터 준비

위에서 설명한 내용을 직접 확인하기 위해 예제 테이블을 생성해 보겠습니다.

테이블 생성 쿼리:

mysql> create table ReplaceNULLDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(10),
    -> Marks int,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.62 sec)

INSERT 명령으로 샘플 데이터 삽입:

mysql> insert into ReplaceNULLDemo(Name,Marks) values('Larry',90);
Query OK, 1 row affected (0.16 sec)

mysql> insert into ReplaceNULLDemo(Name,Marks) values('Carol',NULL);
Query OK, 1 row affected (0.17 sec)

mysql> insert into ReplaceNULLDemo(Name,Marks) values('David',NULL);
Query OK, 1 row affected (0.14 sec)

mysql> insert into ReplaceNULLDemo(Name,Marks) values('Bob',67);
Query OK, 1 row affected (0.17 sec)

mysql> insert into ReplaceNULLDemo(Name,Marks) values('Sam',78);
Query OK, 1 row affected (0.19 sec)

mysql> insert into ReplaceNULLDemo(Name,Marks) values('Mike',NULL);
Query OK, 1 row affected (0.19 sec)

mysql> insert into ReplaceNULLDemo(Name,Marks) values('John',98);
Query OK, 1 row affected (0.16 sec)

SELECT 문으로 전체 레코드 조회:

mysql> select *from ReplaceNULLDemo;

실행 결과:

+----+-------+-------+
| Id | Name  | Marks |
+----+-------+-------+
|  1 | Larry |    90 |
|  2 | Carol |  NULL |
|  3 | David |  NULL |
|  4 | Bob   |    67 |
|  5 | Sam   |    78 |
|  6 | Mike  |  NULL |
|  7 | John  |    98 |
+----+-------+-------+
7 rows in set (0.00 sec)

Marks 컬럼에 NULL 값이 포함되어 있는 것을 확인할 수 있습니다. 이제 이 NULL 값을 0으로 변환해 보겠습니다.

방법 1: IFNULL() 적용 예제

쿼리:

mysql> select ifnull(Marks,0) as ReplacementOfNULLWith0 from ReplaceNULLDemo;

실행 결과 — NULL이 0으로 대체됨:

+------------------------+
| ReplacementOfNULLWith0 |
+------------------------+
|                     90 |
|                      0 |
|                      0 |
|                     67 |
|                     78 |
|                      0 |
|                     98 |
+------------------------+
7 rows in set (0.00 sec)

방법 2: COALESCE() 적용 예제

쿼리:

mysql> select coalesce(Marks,0) as ReplacementOfNULLWith0 from ReplaceNULLDemo;

실행 결과 — NULL이 0으로 대체됨:

+------------------------+
| ReplacementOfNULLWith0 |
+------------------------+
| 90 |
| 0  |
| 0  |
| 67 |
| 78 |
| 0  |
| 98 |
+------------------------+
7 rows in set (0.00 sec)

방법 3: CASE 문 적용 예제

쿼리:

mysql> select case
    -> when Marks is null then 0
    -> else Marks end as ReplacementOfNULLWith0
    -> from ReplaceNULLDemo;

실행 결과 — NULL이 0으로 대체됨:

+------------------------+
| ReplacementOfNULLWith0 |
+------------------------+
| 90                     |
| 0                      |
| 0                      |
| 67                     |
| 78                     |
| 0                      |
| 98                     |
+------------------------+
7 rows in set (0.00 sec)

마무리: 어떤 방법을 선택해야 할까?

세 가지 방법 모두 동일한 결과를 반환하지만, 상황에 따라 적합한 선택이 달라집니다.

  • IFNULL(): 단순히 하나의 컬럼에 대한 기본값 지정이 필요할 때 가장 간결하고 직관적입니다.
  • COALESCE(): 여러 컬럼 중 NULL이 아닌 첫 번째 값을 찾아야 할 때 유용하며, 표준 SQL이라 다른 DBMS와의 호환성도 뛰어납니다.
  • CASE 문: 단순 대체를 넘어 조건에 따라 복잡한 로직을 처리해야 할 때 가장 유연합니다.

간단한 기본값 처리라면 IFNULL() 또는 COALESCE()를, 복잡한 조건 분기가 필요하다면 CASE 문을 활용하는 것을 권장합니다.