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 문을 활용하는 것을 권장합니다.