Tech

Diary

Lecture

About Me

개발중

SQL NULL 다루기

JeongSeulho

2025년 01월 06일

준비중...
클립보드로 복사

NULL을 찾는 비교 연산자

  • =이 아닌 IS NULLIS NOT NULL을 사용해야 한다
copy
WHERE birth_date IS NULL
WHERE birth_date IS NOT NULL

three-valued logic

  • three-valued logic : TRUE, FALSE, UNKNOWN 세 가지 값을 가진다는 의미
  • SQL에서 NULL과 비교 연산을 하면 결과는 UNKNOWN이다
copy
SELECT *
FROM employee
WHERE birth_date = '1990-01-01'; -- birth_date가 NULL이면 UNKNOWN이 반환
  • UNKNOWN은 TRUE일수도 FALSE일수도 있다는 의미

Image

NOT IN에서의 UNKNOWN 주의 사항

  • 3 NOT IN (1, 2, NULL)UNKNOWN이 반환된다

(3 != 1) AND (3 != 2) AND (3 != NULL)
TRUE AND TRUE AND UNKNOWN
UNKNOWN

  • 2000년대생이 없는 부서의 id, 이름 조회
copy
SELECT D.id, D.name
FROM department D
WHERE NOT IN (
    SELECT E.dept_id -- 만약 아직 부서배치 받지 않은 2000년대생이 있어 dept_id가 NULL이라면?
    FROM employee E
    WHERE E.birth_date >= '2000-01-01'
);
  • 부서배치 받지 않은 2000년대생이 있어 dept_id가 NULL인 경우 위 조건의 결과는 항상 UNKNOWN이 된다

WHERE 절은 TRUE만 반환하고 UNKNOWN은 FALSE와 같이 취급된다

  • NOT EXISTS로 변환하거나 서브 쿼리내 IS NOT NULL을 추가해야함