MySQL에서 IFNULL() 함수를 사용하면 쿼리 결과가 존재하지 않는 경우에도 원하는 기본값을 반환할 수 있습니다. 이는 검색 조건에 해당하는 데이터가 없을 때 NULL 대신 사용자에게 의미 있는 메시지를 보여주고 싶을 때 매우 유용합니다.
예제 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다. 아래 쿼리로 테이블을 만들 수 있습니다.
mysql> create table IfNullDemo -> ( -> Id int, -> Name varchar(100) -> ); Query OK, 0 rows affected (0.60 sec)
데이터 삽입
INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into IfNullDemo values(1,'John'); Query OK, 1 row affected (0.18 sec) mysql> insert into IfNullDemo values(200,'Sam'); Query OK, 1 row affected (0.21 sec) mysql> insert into IfNullDemo values(204,'Carol'); Query OK, 1 row affected (0.14 sec) mysql> insert into IfNullDemo values(510,'Johnson'); Query OK, 1 row affected (0.18 sec)
전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from IfNullDemo;
실행 결과는 다음과 같습니다.
+------+---------+ | Id | Name | +------+---------+ | 1 | John | | 200 | Sam | | 204 | Carol | | 510 | Johnson | +------+---------+ 4 rows in set (0.00 sec)
조건에 해당하는 값이 있을 경우
먼저 조건이 참(TRUE)인 경우, 즉 일치하는 데이터가 존재할 때의 동작을 살펴보겠습니다. 서브쿼리로 Id가 200인 레코드를 조회합니다.
mysql> select ifnull((select Id from IfNullDemo where Id = 200),'No Result Found') As ResultFound;
실행 결과는 다음과 같습니다.
+-------------+ | ResultFound | +-------------+ | 200 | +-------------+ 1 row in set (0.00 sec)
Id가 200인 레코드가 실제로 존재하므로, IFNULL()은 서브쿼리의 결과값인 200을 그대로 반환합니다.
조건에 해당하는 값이 없을 경우
이번에는 존재하지 않는 Id 값(400)으로 조회하여, 결과가 없을 때 IFNULL()이 어떻게 동작하는지 확인해 보겠습니다.
mysql> select ifnull((select Id from IfNullDemo where Id = 400),'No Result Found') As ResultFound;
실행 결과는 다음과 같습니다.
+-----------------+ | ResultFound | +-----------------+ | No Result Found | +-----------------+ 1 row in set (0.00 sec)
정리
IFNULL() 함수는 첫 번째 인자가 NULL일 때 두 번째 인자로 지정한 대체값을 반환합니다. 위 예제처럼 서브쿼리와 함께 사용하면, 조회 결과가 없어서 NULL이 반환되는 상황에서 'No Result Found'와 같은 기본 메시지를 출력할 수 있습니다. 이 방식은 애플리케이션 단에서 별도의 NULL 처리 로직을 작성하지 않아도 되므로 코드를 더 간결하게 유지하는 데 도움이 됩니다.