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

MySQL에서 IFNULL()로 NULL 값이 있는 행만 비교하고 조회하는 방법

MySQL에서 두 컬럼의 값을 비교할 때 한쪽 컬럼에 NULL이 포함되어 있으면, 일반적인 비교 연산자만으로는 의도한 결과를 얻기 어렵습니다. 이런 경우 IFNULL() 함수를 사용하면 NULL 값을 0과 같은 기본값으로 치환해 손쉽게 비교할 수 있습니다.

1. 예제 테이블 생성하기

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

mysql> create table DemoTable
(
    Value1 int,
    Value2 int
);
Query OK, 0 rows affected (0.75 sec)

2. 데이터 삽입하기

INSERT 명령어로 레코드를 추가합니다. 일부 레코드에는 의도적으로 NULL 값을 넣겠습니다.

mysql> insert into DemoTable values(10,NULL);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(20,40);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values(3,NULL);
Query OK, 1 row affected (0.20 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     10 | NULL   |
|     20 | 40     |
|      3 | NULL   |
+--------+--------+
3 rows in set (0.00 sec)

4. IFNULL()로 NULL 값이 있는 행만 조회하기

다음은 Value2가 NULL인 행만 골라서 표시하는 쿼리입니다. IFNULL(Value2, 0)을 통해 NULL을 0으로 바꾼 뒤 Value1과 비교합니다.

mysql> select *from DemoTable where Value1 > IFNULL(Value2,0);

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

+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     10 | NULL   |
|      3 | NULL   |
+--------+--------+
2 rows in set (0.00 sec)

IFNULL() 동작 원리 정리

IFNULL(표현식, 대체값)은 첫 번째 인자가 NULL이 아니면 해당 값을 그대로 반환하고, NULL이면 두 번째 인자로 지정한 대체값을 반환합니다. 위 예제에서는 Value2가 NULL인 행이 0으로 평가되므로 'Value1 > 0' 조건을 만족해 결과에 포함되고, Value2가 40인 행은 20 > 40이 거짓이므로 제외됩니다. 참고로 COALESCE() 함수를 사용해도 동일한 결과를 얻을 수 있으며, COALESCE()는 여러 인자 중 NULL이 아닌 첫 번째 값을 반환한다는 점이 다릅니다.