C.W.K.
Stream
Lesson 07 of 16 · published

쿼리에서 NULL semantics

~12 min · queries, null

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

3-값 로직 실전

SQL 은 진리값 셋: TRUE, FALSE, NULL ('모름'). NULL 포함 모든 연산이 NULL 평가 — NULL = NULL 포함. WHERE 가 조건 TRUE 인 행만 반환 → NULL 은 명시적으로 처리 안 하면 조용히 빠져.

함정

  • WHERE x = NULL 절대 안 매치. IS NULL.
  • WHERE x <> 'something' 이 x 가 NULL 인 행 제외. 원하면 OR x IS NULL.
  • NOT IN (subquery) 가 subquery 에 NULL 있으면 0 행. NOT EXISTS.
  • Aggregate (SUM, AVG, COUNT(col)) 가 NULL 조용히 스킵.

NULL 의도적 처리 도구

  • COALESCE(a, b, c) — 첫 non-NULL.
  • NULLIF(a, b) — a = b 면 NULL (0 으로 나누기 회피에 좋음).
  • IS DISTINCT FROM / IS NOT DISTINCT FROM — NULL-safe equality.

Code

NULL surprise·sql
SELECT NULL = NULL;        -- NULL  (TRUE 아님)
SELECT NULL <> NULL;       -- NULL  (FALSE 아님)
SELECT 5 + NULL;           -- NULL
SELECT NULL OR TRUE;       -- TRUE  (NULL OR TRUE = TRUE)
SELECT NULL AND TRUE;      -- NULL
SELECT NULL = NULL IS TRUE;-- FALSE  (IS 가 3-값 로직 처리)
WHERE 에서 NULL 처리·sql
-- 음의 케이스에서 NULL discount 포함
SELECT * FROM products
WHERE  discount <> 0.5 OR discount IS NULL;

-- 또는 IS DISTINCT FROM
SELECT * FROM products
WHERE  discount IS DISTINCT FROM 0.5;

-- display 에서 NULL fallback
SELECT name, COALESCE(phone, 'N/A') AS phone
FROM   contacts;

-- 0 으로 나누기 회피
SELECT revenue, expenses,
       revenue / NULLIF(expenses, 0) AS ratio
FROM   financials;

External links

Exercise

위 NULL 함정 각각 발동시키는 작은 쿼리 4 개 + 안전하게 재작성. 보너스: NOT INNOT EXISTS 전환이 결과 바꾸는 쿼리 만들기.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.