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

MySQL에서 CASE WHEN으로 NULL 값에 따라 다른 열 반환하기

MySQL CASE WHEN 문법 소개

MySQL에서 특정 열(column)의 값이 NULL인 경우에는 NULL을 그대로 반환하고, NULL이 아닌 경우에는 다른 열의 값을 가져오고 싶다면 CASE WHEN 문을 활용하면 됩니다.

기본 형식은 다음과 같습니다.

CASE WHEN column1 IS NULL THEN NULL ELSE column2 END

즉, column1이 NULL이면 NULL을 반환하고, 값이 존재하면 column2의 값을 반환하는 방식입니다. 실제 예제를 통해 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable
-> (
-> Name varchar(20),
-> Marks1 int,
-> Marks2 int
-> );
Query OK, 0 rows affected (0.72 sec)

2. 데이터 삽입하기

INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다. 일부러 NULL 값이 포함된 데이터를 넣어 확인해 보겠습니다.

mysql> insert into DemoTable values('Chris',45,null);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('David',null,78);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Bob',67,98);
Query OK, 1 row affected (0.14 sec)

3. 저장된 데이터 확인하기

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

mysql> select *from DemoTable;

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

+-------+--------+--------+
| Name  | Marks1 | Marks2 |
+-------+--------+--------+
| Chris |     45 |  NULL |
| David |  NULL |   78 |
| Bob  |     67 |   98 |
+-------+--------+--------+
3 rows in set (0.00 sec)

4. CASE WHEN 쿼리 적용하기

이제 CASE WHEN을 사용하여 Marks1이 NULL이면 NULL을, NULL이 아니면 Marks2의 값을 반환하는 쿼리를 작성합니다.

mysql> select *,
-> (case when Marks1 is null then null else Marks2 end ) as Value
-> from DemoTable;

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

+-------+--------+--------+-------+
| Name  | Marks1 | Marks2 | Value |
+-------+--------+--------+-------+
| Chris |     45 |  NULL | NULL |
| David |  NULL |   78 | NULL |
| Bob  |     67 |   98 |   98 |
+-------+--------+--------+-------+
3 rows in set (0.00 sec)

결과 분석

출력 결과를 보면 동작 방식을 쉽게 이해할 수 있습니다.

  • Chris: Marks1이 45로 NULL이 아니므로 Value는 Marks2의 값인 NULL이 반환됩니다.
  • David: Marks1이 NULL이므로 Value 역시 NULL이 반환됩니다.
  • Bob: Marks1이 67로 NULL이 아니므로 Value는 Marks2의 값인 98이 반환됩니다.

이처럼 CASE WHEN ... IS NULL THEN ... ELSE ... END 구문을 사용하면 NULL 여부에 따라 원하는 열의 값을 유연하게 선택하여 조회할 수 있습니다. 조건부 로직이 필요한 리포트 쿼리나 데이터 정제 작업에서 매우 유용하게 활용됩니다.