MySQL에서 NULL로 저장된 데이터를 특정 값으로 일괄 변경해야 하는 경우가 종종 있습니다. 예를 들어, 시험 점수가 아직 입력되지 않아 NULL로 남아 있는 레코드를 기본값으로 채우고 싶을 수 있습니다. 이럴 때는 UPDATE 문과 함께 IS NULL 조건을 사용하면 됩니다.
일반적인 비교 연산자(=)로는 NULL을 비교할 수 없기 때문에 반드시 IS NULL을 사용해야 한다는 점이 핵심입니다. 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 학생 점수를 저장할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentScore int
);
Query OK, 0 rows affected (0.47 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 값이 있는 레코드와 NULL인 레코드를 함께 넣어 보겠습니다.
mysql> insert into DemoTable values(89); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(NULL); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(45); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(NULL); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(56); Query OK, 1 row affected (0.14 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------------+ | StudentScore | +--------------+ | 89 | | NULL | | 45 | | NULL | | 56 | +--------------+ 5 rows in set (0.00 sec)
총 5개의 레코드 중 2개가 NULL로 되어 있는 것을 확인할 수 있습니다.
4. NULL 값을 특정 값으로 업데이트하기
이제 IS NULL 조건을 활용하여 NULL인 필드만 골라서 원하는 값으로 변경합니다.
mysql> update DemoTable set StudentScore=30 where StudentScore IS NULL; Query OK, 2 rows affected (0.34 sec) Rows matched: 2 Changed: 2 Warnings: 0
쿼리 실행 결과, NULL이었던 2개 행이 성공적으로 변경되었습니다.
5. 업데이트 결과 확인하기
다시 한번 테이블을 조회하여 결과를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------------+ | StudentScore | +--------------+ | 89 | | 30 | | 45 | | 30 | | 56 | +--------------+ 5 rows in set (0.00 sec)
NULL이었던 두 개의 레코드가 모두 30으로 변경된 것을 볼 수 있습니다.
참고: 다른 유용한 방법들
상황에 따라 아래와 같은 함수들을 활용할 수도 있습니다.
- IFNULL(): 조회 시에만 NULL을 대체 값으로 표시하고 싶을 때 사용합니다. 예:
SELECT IFNULL(StudentScore, 30) FROM DemoTable; - COALESCE(): 여러 컬럼 중 NULL이 아닌 첫 번째 값을 반환하며, 위와 같은 용도로 활용 가능합니다.
- UPDATE ... SET col = IFNULL(col, 값): 이미 값이 있는 데이터는 그대로 두고, NULL인 경우에만 새 값을 채울 때 유용합니다.
주의할 점은 WHERE 절에서 = NULL이 아닌 IS NULL을 사용해야 한다는 것입니다. SQL에서 NULL은 '알 수 없는 값'을 의미하기 때문에 등호 비교가 항상 거짓으로 처리됩니다.