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

MySQL에서 CONCAT()과 IFNULL()로 값 연결 및 NULL 처리하는 방법

MySQL에서 여러 값을 하나의 문자열로 연결할 때는 CONCAT() 함수를 사용하고, 연결 대상 값이 NULL일 경우에는 IFNULL() 함수를 함께 사용하면 됩니다. CONCAT() 함수에 NULL이 포함되면 결과 전체가 NULL로 반환되기 때문에, IFNULL()로 NULL 값을 다른 문자열로 대체해 주는 것이 핵심입니다.

기본 문법

값을 연결하면서 NULL을 처리하는 기본적인 쿼리 문법은 다음과 같습니다.

SELECT
CONCAT('anyStringValue:', IFNULL(yourColumnName, 'anyStringValue')) AS anyVariableName
FROM yourTableName;

예제 테이블 생성

위 문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table ConcatValues
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> FirstName varchar(20),
-> MiddleName varchar(20),
-> LastName varchar(20),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.62 sec)

데이터 삽입

insert 명령으로 몇 개의 레코드를 추가합니다. 이때 MiddleName 컬럼에는 의도적으로 NULL 값을 넣어 NULL 처리 과정을 확인할 수 있도록 합니다.

mysql> insert into ConcatValues(FirstName,MiddleName,LastName) values('Mary','Elizabeth','Smith');
Query OK, 1 row affected (0.24 sec)

mysql> insert into ConcatValues(FirstName,MiddleName,LastName) values('John',NULL,'Smith');
Query OK, 1 row affected (0.24 sec)

mysql> insert into ConcatValues(FirstName,MiddleName,LastName) values('Carol',NULL,'Taylor');
Query OK, 1 row affected (0.16 sec)

mysql> insert into ConcatValues(FirstName,MiddleName,LastName) values('David',NULL,'Miller');
Query OK, 1 row affected (0.23 sec)

전체 레코드 조회

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from ConcatValues;

실행 결과는 다음과 같습니다.

+----+-----------+------------+----------+
| Id | FirstName | MiddleName | LastName |
+----+-----------+------------+----------+
| 1 | Mary | Elizabeth | Smith |
| 2 | John | NULL | Smith |
| 3 | Carol | NULL | Taylor |
| 4 | David | NULL | Miller |
+----+-----------+------------+----------+
4 rows in set (0.00 sec)

NULL 처리하면서 값 연결하기

이제 IFNULL() 함수를 사용해 NULL인 중간 이름(MiddleName)을 'Not Available'이라는 문자열로 대체하면서 값을 연결해 보겠습니다.

mysql> select
-> concat('The middle name is:', IFNULL(MiddleName, 'Not Available')) AS MiddleName
-> from ConcatValues;

다음은 실행 결과입니다.

+----------------------------------+
| MiddleName |
+----------------------------------+
| The middle name is:Elizabeth |
| The middle name is:Not Available |
| The middle name is:Not Available |
| The middle name is:Not Available |
+----------------------------------+
4 rows in set (0.00 sec)

실행 결과를 보면 MiddleName이 NULL인 행은 'Not Available'로 대체되어 정상적으로 출력된 것을 확인할 수 있습니다. 이처럼 CONCAT()과 IFNULL()을 조합하면 NULL 값 때문에 전체 연결 결과가 NULL이 되는 문제를 손쉽게 방지할 수 있습니다.

참고로 IFNULL() 대신 COALESCE() 함수를 사용해도 동일한 결과를 얻을 수 있으며, COALESCE()는 여러 인자를 받아 첫 번째로 NULL이 아닌 값을 반환하는 더 범용적인 함수라는 점도 알아두면 유용합니다.