MySQL에서 특정 컬럼의 값이 실제로 입력된 값인지, 아니면 NULL 또는 기본값(DEFAULT)인지 확인해야 하는 경우가 있습니다. 이럴 때 IFNULL() 함수와 DEFAULT() 함수를 함께 활용하면 손쉽게 판별할 수 있습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다. Name 컬럼에는 'Larry'라는 기본값을 설정하고, Age 컬럼은 NULL을 허용하도록 구성했습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100) DEFAULT 'Larry',
Age int DEFAULT NULL
);
Query OK, 0 rows affected (0.73 sec)2. 데이터 삽입하기
INSERT 명령어를 사용하여 다양한 형태로 레코드를 삽입합니다. 일부 레코드는 특정 컬럼 값을 생략하여 기본값이나 NULL이 저장되도록 했습니다.
mysql> insert into DemoTable(Name,Age) values('John',23);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Age) values(24);
Query OK, 1 row affected (0.13 sec)3. 전체 데이터 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 23 | | 2 | Larry | NULL | | 3 | David | NULL | | 4 | Larry | 24 | +----+-------+------+ 4 rows in set (0.00 sec)
결과를 보면 Id가 2인 행은 Name 컬럼에 기본값인 'Larry'가 자동으로 저장되었고, Age 컬럼에는 NULL이 들어간 것을 확인할 수 있습니다.
4. NULL 여부 및 기본값 확인 쿼리
이제 핵심인 쿼리입니다. IFNULL()로 NULL 값을 처리하고, DEFAULT() 함수로 해당 컬럼의 기본값을 가져와 비교함으로써 값이 NULL인지 기본값인지를 판별할 수 있습니다.
mysql> select *from DemoTable WHERE IFNULL(Name, DEFAULT(Name)) <> DEFAULT(Name);
실행 결과는 다음과 같습니다.
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 23 | | 3 | David | NULL | +----+-------+------+ 2 rows in set (0.00 sec)
결과를 분석해 보면 다음과 같습니다.
- Id 1 (John): 기본값이 아닌 실제 입력된 값이므로 조회됩니다.
- Id 2 (Larry): 값이 기본값 'Larry'와 동일하므로 제외됩니다.
- Id 3 (David): 기본값이 아닌 실제 입력된 값이므로 조회됩니다.
- Id 4 (Larry): 값이 기본값 'Larry'와 동일하므로 제외됩니다.
이처럼 IFNULL(컬럼명, DEFAULT(컬럼명))과 DEFAULT(컬럼명)을 비교하면, 해당 컬럼의 값이 사용자가 직접 입력한 값인지 아니면 기본값 또는 NULL인지를 간단하게 구분할 수 있습니다.