MySQL에서 NULL 열을 값으로 채우는 방법
MySQL 테이블에서 특정 열이 NULL로 비어 있을 때, 이를 원하는 값이나 계산 결과로 채워야 하는 경우가 자주 발생합니다. 이럴 때는 IS NULL 조건을 활용하면 간단하게 해결할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
ProductPrice int,
ProductQuantity int,
TotalAmount int
);
Query OK, 0 rows affected (1.22 sec)2단계: 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다. 이때 TotalAmount 열에는 값을 넣지 않으므로 자동으로 NULL이 저장됩니다.
mysql> insert into DemoTable(ProductPrice,ProductQuantity) values(100,2); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable(ProductPrice,ProductQuantity) values(500,4); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable(ProductPrice,ProductQuantity) values(1000,10); Query OK, 1 row affected (0.21 sec)
3단계: 현재 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다. TotalAmount 열이 NULL로 비어 있는 것을 확인할 수 있습니다.
+--------------+-----------------+-------------+ | ProductPrice | ProductQuantity | TotalAmount | +--------------+-----------------+-------------+ | 100 | 2 | NULL | | 500 | 4 | NULL | | 1000 | 10 | NULL | +--------------+-----------------+-------------+ 3 rows in set (0.00 sec)
4단계: IS NULL 조건으로 NULL 열 채우기
다음은 IS NULL 조건을 사용하여 NULL로 비어 있는 TotalAmount 열을 상품 가격과 수량의 곱셈 결과로 채우는 쿼리입니다.
mysql> update DemoTable set TotalAmount=(ProductPrice*ProductQuantity) where TotalAmount IS NULL; Query OK, 3 rows affected (0.20 sec) Rows matched: 3 Changed: 3 Warnings: 0
5단계: 업데이트 결과 확인하기
업데이트가 정상적으로 적용되었는지 테이블 레코드를 다시 한번 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------------+-----------------+-------------+ | ProductPrice | ProductQuantity | TotalAmount | +--------------+-----------------+-------------+ | 100 | 2 | 200 | | 500 | 4 | 2000 | | 1000 | 10 | 10000 | +--------------+-----------------+-------------+ 3 rows in set (0.00 sec)
정리
UPDATE 문과 WHERE ... IS NULL 조건을 조합하면, NULL로 비어 있는 열만 골라서 원하는 값이나 연산 결과로 손쉽게 채울 수 있습니다. 위 예제처럼 TotalAmount = ProductPrice * ProductQuantity와 같은 계산식을 적용하면 기존 데이터를 기반으로 누락된 값을 일괄 보완할 수 있어 실무에서 매우 유용하게 활용됩니다.