들어가며
데이터의 NULL을 처리해야 하는 상황에서 MySQL에서 사용할 수 있는 여러가지 방법에 대해 정리해보고자 합니다. 이 포스팅에서는 MySQL의 NULL을 다루는 방법 중 가장 많이 사용되는 IS NULL, IFNULL, COALESCE에 대해 다룹니다.
❏ IS NULL, IS NOT NULL
IS NULL에 대해서는 지난 번 비교 연산자를 다루면서 개념만 확인해보았는데, 다시 한 번 정리해보도록 하겠습니다.
IS NULL과 IS NOT NULL은 데이터의 값이 NULL인지 아닌지 확인할 수 있는 연산자입니다. 따라서, 이 두 가지 방식을 이용하여 NULL이 포함되어있는 데이터에 대해 원하는대로 값을 조회해올 수 있습니다! 👍
❍ IS NULL
SELECT * FROM student WHERE school_id IS NULL;
이 쿼리는 student 테이블에서 school_id 정보가 NULL인 모든 학생을 조회합니다.
❍ IS NOT NULL
SELECT * FROM student WHERE school_id IS NOT NULL;
반대로 이 쿼리는 student 테이블에서 school_id 정보가 NULL이 아닌 모든 학생을 조회합니다.
주의해야 할 점
❓ IS NULL이나 IS NOT NULL 말고, 다른 비교 연산자인 =, <>, !=를 사용할 수 있을까요?
Suspicious comparison with NULL, probably IS NULL operator should be used
NULL에 대한 비교가 의심스럽다면서, IS NULL을 사용하라는 경고문을 볼 수 있습니다.
NULL에 대해 비교하기 위해선 반드시 IS NULL, IS NOT NULL을 사용합시다!
❏ IFNULL
IFNULL 함수는 첫 번째 인자가 NULL이 아니면 그대로 반환, NULL이면 두 번째 인자를 반환합니다.
SELECT student_id, IFNULL(school_id, 0) AS school_id
FROM student;
이 쿼리는 school_id가 NULL이 아니라면 그대로 반환하되, NULL인 경우에는 0으로 처리됩니다.
이처럼, 값을 조회했을 경우, NULL인 값에 대해 기본적으로 동일한 값을 부여할 수 있습니다.
❏ COALESCE
COALESCE 함수는 NULL이 아닌 첫 번째 인자를 반환합니다. 모든 인자가 NULL이면 NULL을 반환하게 됩니다.
SELECT COALESCE(컬럼1, 컬럼2, 컬럼3, ...)
FROM table;
컬럼1이 NULL이 아니면, 컬럼1을 반환하고, NULL이면 컬럼2를 반환합니다.
컬럼이 모두 NULL이면 그제서야 NULL이 반환됩니다.
COALESCE는 IFNULL에 비해 여러 값을 후보군으로 둘 수 있기에, 조금은 더 유연하게 사용할 수 있는 것 같습니다.