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

MySQL COALESCE() 함수로 두 개의 열을 하나의 열로 합치는 방법

MySQL에서 서로 다른 두 개의 열을 하나의 열처럼 출력해야 하는 경우가 종종 있습니다. 이럴 때 COALESCE() 함수를 사용하면 간단하게 해결할 수 있습니다.

COALESCE() 함수는 인자로 전달된 값들 중 NULL이 아닌 첫 번째 값을 반환합니다. 따라서 UserName과 UserAge 두 열을 인자로 넘기면, 이름이 NULL인 행에서는 나이가, 나이가 NULL인 행에서는 이름이 대신 출력되어 마치 하나의 열처럼 보이게 됩니다.

개념을 쉽게 이해하기 위해 먼저 데모용 테이블을 만들어 보겠습니다.

1. 데모 테이블 생성

mysql> create table combineTwoColumnsDemo
-> (
-> UserId int,
-> UserName varchar(20),
-> UserAge int
-> );
Query OK, 0 rows affected (1.12 sec)

UserId, UserName, UserAge 세 개의 열로 구성된 테이블이 생성되었습니다.

2. 샘플 데이터 삽입

이제 INSERT 명령으로 테스트 데이터를 입력합니다. 특히 NULL 값이 포함된 레코드도 함께 넣어 COALESCE()의 동작을 확인해 보겠습니다.

mysql> insert into combineTwoColumnsDemo values(101,'John',23);
Query OK, 1 row affected (0.16 sec)
mysql> insert into combineTwoColumnsDemo values(102,'Carol',20);
Query OK, 1 row affected (0.14 sec)
mysql> insert into combineTwoColumnsDemo values(103,'Bob',25);
Query OK, 1 row affected (0.13 sec)
mysql> insert into combineTwoColumnsDemo values(104,'Mike',26);
Query OK, 1 row affected (0.18 sec)
mysql> insert into combineTwoColumnsDemo values(105,NULL,23);
Query OK, 1 row affected (0.22 sec)
mysql> insert into combineTwoColumnsDemo values(105,'Maxwell',NULL);
Query OK, 1 row affected (0.15 sec)

3. 저장된 전체 레코드 확인

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

mysql> select *from combineTwoColumnsDemo;

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

+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
| 101 | John | 23 |
| 102 | Carol | 20 |
| 103 | Bob | 25 |
| 104 | Mike | 26 |
| 105 | NULL | 23 |
| 105 | Maxwell | NULL |
+--------+----------+---------+
6 rows in set (0.00 sec)

마지막 두 행을 보면 한 레코드에는 UserName이 NULL이고, 다른 레코드에는 UserAge가 NULL인 것을 알 수 있습니다.

4. COALESCE()로 두 열 결합하기

이제 두 개의 열을 하나의 열로 결합하는 쿼리입니다. COALESCE(UserName, UserAge)를 사용하고 별칭(Alias)을 지정하여 결과를 깔끔하게 표시합니다.

mysql> SELECT UserName,
-> UserAge,
-> COALESCE(UserName, UserAge) AS Combine_UserName_UserAge
-> FROM combineTwoColumnsDemo;

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

+----------+---------+--------------------------+
| UserName | UserAge | Combine_UserName_UserAge |
+----------+---------+--------------------------+
| John | 23 | John |
| Carol | 20 | Carol |
| Bob | 25 | Bob |
| Mike | 26 | Mike |
| NULL | 23 | 23 |
| Maxwell | NULL | Maxwell |
+----------+---------+--------------------------+
6 rows in set (0.00 sec)

결과 분석

  • UserName이 NULL인 경우: UserAge 값인 '23'이 결합 열에 출력됩니다.
  • UserAge가 NULL인 경우: UserName 값인 'Maxwell'이 결합 열에 출력됩니다.
  • 두 값 모두 존재하는 경우: 항상 첫 번째 인자인 UserName이 우선적으로 반환됩니다.

이처럼 COALESCE() 함수를 활용하면 NULL 값을 우아하게 처리하면서 여러 열을 하나의 열로 결합할 수 있습니다. 참고로 비슷한 목적의 함수로 IFNULL()이 있지만, IFNULL()은 인자를 두 개만 받을 수 있는 반면 COALESCE()는 세 개 이상의 열도 처리할 수 있어 더 유연합니다.