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이 아닌 값을 고릅니다. 표시용 기본값에 자주 씁니다.
함정
NULL = NULL은 참이 아닙니다.NOT IN서브쿼리에 NULL이 섞이면 결과가 비는 경우가 있습니다.
연습
CASE·COALESCE 태그 문제에서 NULL이 있는 행을 먼저 눈으로 확인한 뒤 쿼리를 작성하세요.
표시용 패턴
SELECT id,
COALESCE(CAST(score AS TEXT), 'N/A') AS score_label
FROM attempts;
타입을 맞춘 뒤 COALESCE하세요. 숫자와 문자열을 그냥 섞으면 엔진마다 오류가 납니다.
한 줄
> NULL은 IS로 검사하고, 빈 칸 대체는 COALESCE, 분기 라벨은 CASE.
체크리스트
- 비교에
=NULL을 쓰지 않았나? - 집계 전 필터는 WHERE, 집계 후는 HAVING
- 라벨 분기는 CASE 순서 OK?