# 조건식

SELECT 문에서 특정 조건에 따라 특정 결과를 얻고 싶은 경우 사용합니다.

조건식은 CASE WHEN 또는 IF를 사용해서 만들 수 있습니다. 각 방법의 장단점에 대해 설명합니다.



# CASE WHEN

여러 조건을 설정하고 싶은 경우, 유용한 방식입니다.

특정 값이 여러 조건에 해당하는 경우, 맨 위에 작성된 조건에 먼저 적용됩니다.

TIP

조건은 멱등하게 작성하는 것을 추천합니다.

CASE 
  WHEN 조건1 THEN 조건1이 참일 경우 결과
  WHEN 조건2 THEN 조건2가 참일 경우 결과
ELSE 그 외 조건일 경우 결과
END AS 새로운_컬럼_이름
WITH numbers AS (
  SELECT 
    90 AS A, 2 AS B 
  UNION ALL
  SELECT 
    50,  8 
  UNION ALL
  SELECT 
    60, 6 
  UNION ALL
  SELECT 
    50, 10
)

SELECT A, B,
  CASE A
    WHEN 90 THEN 'red'
    WHEN 50 THEN 'blue'
    ELSE 'green'
  END
  AS result
FROM numbers
WITH numbers AS (
  SELECT 
    90 AS A, 2 AS B 
  UNION ALL
  SELECT 
    50,  8 
  UNION ALL
  SELECT 
    60, 6 
  UNION ALL
  SELECT 
    50, 10
)

SELECT A, B,
  CASE
    WHEN A > 60 THEN 'red'
    WHEN A > 30 THEN 'blue'
    ELSE 'green'
  END
  AS result
FROM numbers


# IF

조건이 하나일 경우 유용한 방식입니다.

  • 문법 : IF(조건, 조건이 참일 경우 결과, 조건이 참이 아닐 경우 결과)
SELECT
  IF(1=1, '동일한 결과', '동일하지 않은 결과') as result1,
  IF(1=2, '동일한 결과', '동일하지 않은 결과') as result2
WITH numbers AS (
  SELECT 
    90 AS A, 2 AS B 
  UNION ALL
  SELECT 
    50,  8 
  UNION ALL
  SELECT 
    60, 6 
  UNION ALL
  SELECT 
    50, 10
)

SELECT
  A, B,
  IF(A<B, True, False) as result
FROM numbers


# IFNULL

조건이 NULL일 경우와 아닌 경우를 나누고 싶을 경우 사용합니다.

  • IFNULL(조건, NULL일 경우 결과)

조건이 NULL이 아니면 조건의 결과를 출력하고, NULL이면 NULL일 경우 결과를 출력합니다.

SELECT 
  IFNULL(NULL, 0) AS if_expr_is_null,
  IFNULL(10, 0) AS if_expr_is_not_null


# NULLIF

A=B일 경우 NULL을 반환하고, 그 외엔 A를 반환하고 싶은 경우 사용합니다.

  • NULLIF(A, B)
SELECT 
  NULLIF(0, 0) AS a_is_the_same_as_b,
  NULLIF(10, 0) AS a_is_not_the_same_as_b