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

MySQL에서 쿼리 결과가 없을 때도 값 반환하기 - IFNULL() 함수 활용법

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 처리 로직을 작성하지 않아도 되므로 코드를 더 간결하게 유지하는 데 도움이 됩니다.