CONCAT() 함수는 인수 중 하나라도 NULL이면 결과값으로 NULL을 반환합니다. 즉, CONCAT() 함수의 인수 중 하나로 NULL 값을 포함하는 열 이름을 전달하면, 해당 행의 연결 결과 역시 NULL이 됩니다. 이를 이해하기 쉽도록 'Student' 테이블을 활용한 예제를 살펴보겠습니다.
예제
아래 예제에서는 Name과 Address 두 열의 값을 하나의 문자열로 연결하고 있습니다. 대부분의 행은 정상적으로 연결되지만, 5번째 행(Yashraj)은 Address 값이 NULL이기 때문에 연결 결과도 NULL로 출력되는 것을 확인할 수 있습니다.
mysql> Select Name, Address, CONCAT(Name,' Resident of ',Address) AS 'Detail of Student' from Student; +---------+---------+---------------------------+ | Name | Address | Detail of Student | +---------+---------+---------------------------+ | Gaurav | Delhi | Gaurav Resident of Delhi | | Aarav | Mumbai | Aarav Resident of Mumbai | | Harshit | Delhi | Harshit Resident of Delhi | | Gaurav | Jaipur | Gaurav Resident of Jaipur | | Yashraj | NULL | NULL | +---------+---------+---------------------------+ 5 rows in set (0.00 sec)
NULL 문제를 피하는 방법
NULL 값으로 인해 전체 결과가 NULL이 되는 것을 방지하려면 IFNULL() 또는 COALESCE() 함수를 함께 사용하면 좋습니다. 예를 들어 다음과 같이 작성하면 Address가 NULL인 경우 빈 문자열로 대체되어 정상적인 연결 결과를 얻을 수 있습니다.
mysql> Select Name, Address,
CONCAT(Name, ' Resident of ', IFNULL(Address, '')) AS 'Detail of Student'
from Student;이처럼 CONCAT() 함수 사용 시 데이터에 NULL이 포함될 가능성이 있다면, 미리 NULL 처리 로직을 추가해 두는 것이 안전합니다.