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

MySQL COALESCE() 함수로 NULL 필드만 다른 컬럼 값으로 업데이트하는 방법

개요

MySQL에서 한 컬럼의 값이 NULL일 때, 같은 행에 있는 다른 컬럼의 값으로 대체하면서 해당 필드만 업데이트해야 하는 경우가 있습니다. 이럴 때 COALESCE() 함수를 사용하면 간단하게 해결할 수 있습니다.

COALESCE()는 인자로 전달된 값들 중 첫 번째로 NULL이 아닌 값을 반환하는 함수입니다. 따라서 COALESCE(Name1, Name2)처럼 작성하면 Name1이 NULL일 경우 Name2의 값이 대신 사용됩니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1805
    (
    Name1 varchar(20),
    Name2 varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable1805 values('Chris',NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1805 values('David','Mike');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1805 values(NULL,'Mike');
Query OK, 1 row affected (0.00 sec)

3. 데이터 확인

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

mysql> select * from DemoTable1805;

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

+-------+-------+
| Name1 | Name2 |
+-------+-------+
| Chris | NULL  |
| David | Mike  |
| NULL  | Mike  |
+-------+-------+
3 rows in set (0.00 sec)

4. 단일 필드 업데이트 쿼리

Name1이 NULL인 경우 Name2의 값으로 채우면서 Name1 필드만 업데이트하는 쿼리는 다음과 같습니다.

mysql> update DemoTable1805
    set Name1 = coalesce(Name1,Name2);
Query OK, 1 row affected (0.00 sec)
Rows matched: 3  Changed: 1 Warnings: 0

실행 결과를 보면 3개의 행이 매칭되었지만 실제로 변경된 행은 1개뿐입니다. 이는 Name1이 NULL인 행만 값이 변경되고, 이미 값이 있는 행은 그대로 유지되기 때문입니다.

5. 결과 확인

업데이트 후 테이블의 레코드를 다시 한번 조회해 보겠습니다.

mysql> select * from DemoTable1805;

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

+-------+-------+
| Name1 | Name2 |
+-------+-------+
| Chris | NULL  |
| David | Mike  |
| Mike  | Mike  |
+-------+-------+
3 rows in set (0.00 sec)

세 번째 행을 보면 Name1이 NULL에서 'Mike'로 변경된 것을 확인할 수 있습니다. 반면 Name1에 이미 값이 있는 행('Chris', 'David')은 기존 값이 그대로 유지됩니다.

정리

COALESCE() 함수를 UPDATE 문과 함께 사용하면 특정 컬럼이 NULL일 때만 다른 컬럼의 값으로 대체하는 조건부 업데이트를 손쉽게 구현할 수 있습니다. 별도의 WHERE 절 없이 전체 테이블에 안전하게 적용할 수 있다는 점이 큰 장점이며, 데이터 정합성을 유지하면서 빈 값을 채워야 하는 상황에서 매우 유용하게 활용됩니다.