데이터의 NULL 처리

my_mon·2023년 3월 9일
0
post-thumbnail

MariaDB에서 조회된 데이터가 Null인 경우 처리하는 방법은 다양하다.
null인 경우 다른 값으로 대체할 수도 있고, 아예 조회가 되지 않게 처리할 수 있다.

IFNULL()

IFNULL() 함수는 첫번째 인자값이 Null 인 경우, 두번째 인자값을 반환한다.
따라서 조회된 데이터가 Null인 경우, IFNULL 함수를 사용하여 다른 값을 반환할 수 있다.

예시)

위 사진에서 확인할 수 있듯이 유재석 유저는 email을 입력하지 않아 null로 표시되어 있다.

select * from cu_name, IFNULL(cu_email, '이메일없음') from my_customer;

위와 같이 IFNULL을 사용하여 첫번째 인자값인 이메일 컬럼의 값이 null인 경우, 두번째 인자값인 '입력안함' 으로 치환되어 표시되게 할 수 있다.

쿼리를 실행한 결과 위 사진같이 <null>로 표시됐던 데이터가 '이메일없음' 으로 치환되어 반환됐다.

COALESCE()

COALESCE() 함수는 여러개의 인자값을 받을 수 있다.
여러개의 인자를 받고 그 중 Null이 아닌 값을 반환한다.

위 사진을 보면 null값이 많이 보이는 유저 테이블이 보인다.

select cu_name, cu_phone, cu_address, coalesce(cu_phone, cu_address, '2번째대체값') from my_customer;

조회할 항목으로 coalesce를 추가해주면서 인자로 연락처, 주소, '2번째대체값' 으로 지정해줬다. 그 후 쿼리를 실행시키면 반환되는 테이블은 아래 사진과 같다.

맨 끝 컬럼에 coalesce 컬럼이 추가되면서, 전달받은 인자값 중 Null이 아닌 값이 표시된다.
고옹백 유저와 강태공 유저는 coalesce 인자로 전달된 cu_phone, cu_address 값이 모두 Null 이므로 마지막인자인 '두번째대체값' 이 채워진다.
강호동 유저는 cu_phone null값이지만 cu_address 컬럼에는 값이 있으므로 cu_address 값이 표시된다.

IS NULL / IS NOT NULL

  1. IS NULL
    조회되는 데이터가 null값인지 검사한다. 이 구문을 통해 지정한 컬럼이 null값인 경우에만 조회가 되도록 처리할 수 있다.
    select * from my_customer where cu_phone is null;

위의 쿼리를 실행하면 cu_phone이 null값인 행들만 조회된다.

  1. IS NOT NULL
    조회하려는 데이터가 null값이 아닌지 검사한다. 이 구문을 통해 지정한 컬럼이 null값인 경우는 조회가 되지 않도록 처리할 수 있다.
    select * from my_customer where cu_email is not null;

위의 쿼리를 실행하면 cu_email 이 null값이 아닌 행들만 조회된다.

IF함수 사용

조건문을 사용하여 조회된 데이터가 Null인 경우 다른 값을 출력하거나, 다른 처리를 할 수 있다.
mariaDB 에서 IF함수는 다음과 같이 작성할 수 있다.

select IF(조건, 참일때 값, 거짓일때 값)

위의 구조에서 조건은 비교할 조건을 의미한다. 참일 때 값은 조건이 참인 경우 반환할 값, 거짓일 때 값은 조건이 거짓인 경우 반환할 값이다.

select IF(cu_phone is null, 'null값', cu_phone) as cu_phone
from my_customer;

위 쿼리를 풀어보자면 cu_phone 컬럼의 값이 null인 경우(true)에는 'null값'을 반환하고, cu_phone 컬럼의 값이 null이 아닌 경우(false)에는 해당 행의 cu_phone의 값을 그대로 반환한다는 뜻이다.

위의 쿼리를 실행시켜서 조회해보면, 7,8 행은 연락처 컬럼이 null이 아니라서 연락처 값을 그대로 반환, 9~11 행은 연락처 컬럼이 null이라서 IF함수에서 지정한 'null값' 이라는 문자열이 대체되어 조회된다.

IF함수는 null 값을 처리하는 것 말고도 다양한 경우에서 사용할 수 있을 것 같다. 다음에 기회가 된다면 IF함수로 처리할 수 있는 여러가지 경우를 터득하여 포스팅 할 계획이다.

profile
기록하는 사람

0개의 댓글