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

MySQL GREATEST() 함수로 여러 열 중 NULL 값이 포함된 레코드 찾는 방법

MySQL에서 여러 열 중 NULL 값이 포함된 레코드 찾기

여러 개의 열(column)로 구성된 집합에서 하나라도 NULL 값이 들어 있는 레코드를 찾아야 할 때가 있습니다. 이럴 때 GREATEST() 함수를 활용하면 아주 간단하게 해결할 수 있습니다.

GREATEST() 함수는 전달된 인수 중 가장 큰 값을 반환하지만, 인수 중 하나라도 NULL이면 결과 역시 NULL을 반환한다는 특징이 있습니다. 바로 이 성질을 이용해 NULL이 포함된 행을 손쉽게 걸러낼 수 있습니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable1862
    (
    Value1 int,
    Value2 int,
    Value3 int,
    Value4 int
    );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입

insert 명령으로 몇 개의 레코드를 삽입합니다. 일부 레코드에는 의도적으로 NULL 값을 넣었습니다.

mysql> insert into DemoTable1862 values(43,34,56,42);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1862 values(NULL,78,65,NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1862 values(110,NULL,78,NULL);
Query OK, 1 row affected (0.00 sec)

3. 전체 레코드 확인

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1862;

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

+--------+--------+--------+--------+
| Value1 | Value2 | Value3 | Value4 |
+--------+--------+--------+--------+
|     43 |     34 |     56 |     42 |
|   NULL |     78 |     65 |   NULL |
|    110 |   NULL |     78 |   NULL |
+--------+--------+--------+--------+
3 rows in set (0.00 sec)

4. NULL 값이 포함된 레코드 조회 쿼리

다음은 열 집합(Value1 ~ Value4) 중 NULL 값이 하나라도 있는 레코드를 찾는 쿼리입니다.

mysql> select * from DemoTable1862 where greatest(Value1,Value2,Value3,Value4) IS NULL;

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

+--------+--------+--------+--------+
| Value1 | Value2 | Value3 | Value4 |
+--------+--------+--------+--------+
|   NULL |     78 |     65 |   NULL |
|    110 |   NULL |     78 |   NULL |
+--------+--------+--------+--------+
2 rows in set (0.00 sec)

결과를 보면 Value1 ~ Value4 중 어느 하나라도 NULL인 두 번째, 세 번째 레코드만 정확히 반환된 것을 확인할 수 있습니다.

추가 팁: LEAST() 함수도 같은 원리로 활용 가능

LEAST() 함수 역시 GREATEST()와 마찬가지로 인수 중 하나라도 NULL이면 NULL을 반환하므로, 동일한 방식으로 NULL 검사에 사용할 수 있습니다. 다만 이 방법은 숫자뿐 아니라 문자열, 날짜 등 비교 가능한 타입에도 적용되며, 열 개수가 많은 경우에도 조건문을 반복해서 나열하는 것보다 코드가 훨씬 간결해진다는 장점이 있습니다.