문법 · SQL · beginner

CASE · NULL · COALESCE

조건 분기 컬럼과 NULL을 다루는 실전 패턴.

배우기 · SQL 문법 · 14분 · 5/14 · sql · CASE · NULL

이 트랙 목차 (14)
  1. 1. SELECT · WHERE · ORDER · LIMIT
  2. 2. JOIN: INNER · LEFT와 없는 행 찾기
  3. 3. GROUP BY · 집계 · HAVING
  4. 4. 서브쿼리·IN·존재 여부
  5. 5. CASE · NULL · COALESCE
  6. 6. 윈도우 함수 맛보기: RANK · OVER
  7. 7. ORDER BY · LIMIT · DISTINCT
  8. 8. INSERT · UPDATE · DELETE 맛보기
  9. 9. 스칼라 함수 (UPPER · ROUND…)
  10. 10. 함수 응용 (INSTR · CAST · GROUP)
  11. 20. CASE · HAVING · LIKE
  12. 21. JOIN · NULLIF · DISTINCT
  13. 22. ROUND · LEFT JOIN · GROUP_CONCAT
  14. 23. UNION · INTERSECT · WITH

CASE

행마다 값을 나누고 싶을 때 씁니다.

SELECT name,
  CASE
    WHEN age < 18 THEN 'teen'
    WHEN age < 65 THEN 'adult'
    ELSE 'senior'
  END AS band
FROM people;

CASE는 식입니다. SELECT에서 새 컬럼으로 두는 편이 읽기 쉽습니다. 분기 순서는 if/else와 같아 구체적 조건을 위에 둡니다.

NULL이란

값이 “없음”입니다. =로 비교하지 않습니다.

WHERE nickname IS NULL
WHERE nickname IS NOT NULL

COUNT(col)은 NULL을 세지 않고, COUNT(*)는 행을 셉니다.

COALESCE

SELECT COALESCE(nickname, name, 'anonymous') AS label
FROM people;

왼쪽부터 첫 번째 NULL이 아닌 값을 고릅니다. 표시용 기본값에 자주 씁니다.

함정

연습

CASE·COALESCE 태그 문제에서 NULL이 있는 행을 먼저 눈으로 확인한 뒤 쿼리를 작성하세요.

표시용 패턴

SELECT id,
  COALESCE(CAST(score AS TEXT), 'N/A') AS score_label
FROM attempts;

타입을 맞춘 뒤 COALESCE하세요. 숫자와 문자열을 그냥 섞으면 엔진마다 오류가 납니다.

한 줄

> NULL은 IS로 검사하고, 빈 칸 대체는 COALESCE, 분기 라벨은 CASE.

체크리스트

  1. 비교에 = NULL을 쓰지 않았나?
  2. 집계 전 필터는 WHERE, 집계 후는 HAVING
  3. 라벨 분기는 CASE 순서 OK?

관련 짧은 원리

관련 문제