null과 관련된 조건식 _ coalesce, nullif, ifnull

(SQL) null과 관련된 조건식 _ coalesce, nullif, ifnull


✋🏾 Google BigQuery을 이용하여 쓰인 포스팅입니다.



1. null과 관련된 조건식 _ coalesce, nullif, ifnull 란?


BigQuery 조건식 중에 null을 이용하는 조건식은 대표적으로 3가지가 있다.

  • COALESCE(expr1,expr2,[expr3…….)
    • 인수로 들어간 표현식(expr) 중에 null이 아닌 첫번째 표현식 값을 반환한다.
    • 값이 반환되면 나머지 표현식은 평가되지 않는다.
    • 입력 표현식에는 모든 데이터 타입이 입력 가능하다.

  • NULLIF(expr1, expr2)
    • expr1과 expr2가 값이 같으면, null을 반환하고 그렇지 않으면 expr1을 반환한다.
    • expr1과 expr2는 같은 상위 데이터 타입에 속해야하며, 비교 가능해야 한다.

  • IFNULL(expr1, expr2)
    • expr1이 null이면 expr2를 반환한다. 그렇지 않으면 expr1을 반환한다.
    • expr1과 expr2에는 모든 데이터 타입이 입력될 수 있다.
    • COALESCE(expr1,expr2)와 같은 표현이다.


2. 예시


예시 데이터셋은 아래와 같다.

-- 예시 데이터 셋 제작 코드 
WITH ex_table AS ( 
    SELECT 30 AS col1, 37 AS col2 , 55 AS col3
UNION ALL SELECT null AS col1, 17 AS col2 , 1 AS col3
UNION ALL SELECT null AS col1, null AS col2 , 1 AS col3
UNION ALL SELECT 3 AS col1, 3 AS col2 , null AS col3 )
SELECT *
FROM ex_table;



위 예시 데이터에 null과 관련된 조건식( coalesce,nullif,ifnull)을 넣고 결과를 비교해보자
출력 결과는 테이블 맨 우측에 위치한 result 칼럼에서 확인할 수 있다.

  • COALESCE 구문 예시

/*
coalesce 예시
*/
WITH ex_table AS ( 
SELECT 30 AS col1, 37 AS col2 , 55 AS col3
UNION ALL SELECT null AS col1, 17 AS col2 , 1 AS col3
UNION ALL SELECT null AS col1, null AS col2 , 1 AS col3
UNION ALL SELECT 3 AS col1, 3 AS col2 , null AS col3 )
SELECT
  *,
  coalesce(col1,col2,col3) as result_coalesce
FROM ex_table;
  • NULLIF 구문 예시

/*
nullif 예시
*/
WITH ex_table AS ( 
SELECT 30 AS col1, 37 AS col2 , 55 AS col3
UNION ALL SELECT null AS col1, 17 AS col2 , 1 AS col3
UNION ALL SELECT null AS col1, null AS col2 , 1 AS col3
UNION ALL SELECT 3 AS col1, 2 AS col2 , null AS col3 )
SELECT
  col1,
  col2,
 nullif(col1,col2) as result_nullif -- nullif는 expr 총 2개만 비교 가능
FROM ex_table

  • IFNULL 구문 예시

/*
ifnull 예시
*/
WITH ex_table AS ( 
SELECT 30 AS col1, 37 AS col2 , 55 AS col3
UNION ALL SELECT null AS col1, 17 AS col2 , 1 AS col3
UNION ALL SELECT null AS col1, null AS col2 , 1 AS col3
UNION ALL SELECT 3 AS col1, 3 AS col2 , null AS col3 )
SELECT
  col1,
  col2,
 ifnull(col1,col2) as result_ifnull
FROM ex_table



© 2024. All rights reserved.