SQL NULL 다루기
JeongSeulho
2025년 01월 06일
준비중...
클립보드로 복사
NULL을 찾는 비교 연산자
=
이 아닌IS NULL
과IS NOT NULL
을 사용해야 한다
WHERE birth_date IS NULL
WHERE birth_date IS NOT NULL
three-valued logic
three-valued logic
:TRUE
,FALSE
,UNKNOWN
세 가지 값을 가진다는 의미- SQL에서 NULL과 비교 연산을 하면 결과는
UNKNOWN
이다
SELECT *
FROM employee
WHERE birth_date = '1990-01-01'; -- birth_date가 NULL이면 UNKNOWN이 반환
UNKNOWN
은 TRUE일수도 FALSE일수도 있다는 의미
NOT IN에서의 UNKNOWN 주의 사항
3 NOT IN (1, 2, NULL)
은UNKNOWN
이 반환된다
(3 != 1)
AND(3 != 2)
AND(3 != NULL)
TRUE
ANDTRUE
ANDUNKNOWN
UNKNOWN
- 2000년대생이 없는 부서의 id, 이름 조회
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
을 추가해야함