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

MySQL에서 NULL 여부에 따라 열을 조건부로 업데이트하는 방법 – IF()와 IS NULL 활용하기

개요

MySQL에서 특정 열의 값이 NULL이면 해당 열을 새 값으로 업데이트하고, 이미 값이 있다면 다른 열을 업데이트하며, 두 열 모두 값이 존재하면 아무 작업도 하지 않는 로직이 필요할 때가 있습니다. 이런 경우 IF() 함수와 IS NULL 조건을 함께 사용하면 간단하게 해결할 수 있습니다.

아래에서 예제 테이블을 만들고 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 테스트용 테이블을 생성합니다.

mysql> create table DemoTable1976
   (
   FirstName varchar(20),
   LastName varchar(20)
   );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다. 일부 레코드에는 의도적으로 NULL 값을 포함시켰습니다.

mysql> insert into DemoTable1976 values('John','Doe');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1976 values('John',NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1976 values(NULL,'Miller');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1976 values('Chris','Brown');
Query OK, 1 row affected (0.00 sec)

3. 현재 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1976;

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

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John      |      Doe |
| John      |     NULL |
| NULL      |   Miller |
| Chris     |    Brown |
+-----------+----------+
4 rows in set (0.00 sec)

4. 조건부 UPDATE 쿼리 작성

이제 핵심인 업데이트 쿼리입니다. IF() 함수 안에서 IS NULL로 조건을 검사하여, 값이 NULL인 경우에만 새 값을 할당하고 그렇지 않으면 기존 값을 그대로 유지합니다. 결과적으로 두 열 모두 값이 있는 행은 변경되지 않습니다.

mysql> update DemoTable1976
   set FirstName=if(FirstName IS NULL,'David',FirstName),
   LastName=if(LastName IS NULL,'Brown',LastName);
Query OK, 2 rows affected (0.00 sec)
Rows matched: 4  Changed: 2 Warnings: 0

쿼리 실행 결과를 보면 전체 4개 행 중 실제로 변경된 행은 2개입니다. 즉, FirstName과 LastName이 모두 존재하는 'John-Doe'와 'Chris-Brown' 행은 아무 변화가 없었고, NULL이 있던 두 행만 업데이트되었습니다.

동작 원리

IF(조건식, 참일 때 값, 거짓일 때 값) 구문은 조건식이 참이면 두 번째 인자를, 거짓이면 세 번째 인자를 반환합니다. 위 쿼리에서는 FirstName IS NULL이 참이면 'David'를 할당하고, 거짓이면 자기 자신의 기존 값을 다시 대입하여 사실상 변경이 없도록 처리한 것입니다.

5. 업데이트 후 결과 확인

테이블을 다시 조회하여 변경 사항을 확인해 보겠습니다.

mysql> select * from DemoTable1976;

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

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John      |      Doe |
| John      |    Brown |
| David     |   Miller |
| Chris     |    Brown |
+-----------+----------+
4 rows in set (0.00 sec)

정리

이처럼 UPDATE 문과 IF(), IS NULL을 조합하면 별도의 프로시저나 애플리케이션 로직 없이도 SQL 한 문장으로 NULL 값만 선별적으로 채우는 작업을 처리할 수 있습니다. 값이 이미 존재하는 행은 기존 값이 그대로 유지되므로, 데이터 무결성을 해치지 않으면서 빈 값만 효율적으로 보완할 수 있습니다.