Ref. 쉬운코드 백발백중 시리즈
크게 세 가지의 의미를 가진다고 볼 수 있음
==> 즉 SQL에서의 NULL은 같다 다르다를 단정 지을 수 없음
그럼 SQL에서 NULL인 데이터를 찾고자 하면 어떻게 해야 되나?
mysql > SELECT id FROM employee WHERE birth_data = NULL;
-> Empty set
이처럼, SQL에서는 NULL에 대해 =, != 와 같은 연산자를 사용 하면 안됨
mysql > SELECT id FROM employee WHERE birth_date IS NULL;
-> id
14
15
생일이 NULL인 직원의 생일을 가져 온다면? IS 키워드를 사용해야됨
즉, NULL에 대해서는 =, != 대신 IS, IS NOT을 사용해야된다.
SQL에서 NULL과 비교 연산을 하게 되면 그 결과는 UNKNOWN
UNKNOWN은 true일 수도 있고, false일 수도 있다는 의미
three-valued logic : 비교/논리 연산 결과로 true,false,unknown을 가지는것
EX
mysql > SELECT * FROM employee WHERE birth_date = '1990-03-15';
-> UNKNOWN
NULL 비교 연산의 결과
UNKNOWN의 비교연산 결과
v NOT IN(v1,v2,v3)는 v != v1 AND v != v2 AND v != v3 이란 의미
여기서 만약 v1,v2,v3 중 하나가 NULL이면 ?
2000년대생이 없느 부서의 ID와 이름을 알고 싶다면?
만약 E.dept_id에 NULL이 포함될 경우는 unknown이나 false가 되고, where절은 true인 경우만 반환함 고로 그 어떤 부서도 반환을 하지 않음
mysql > select D.id, D.name
from department AS D
where D.id NOT IN(select E.dept_id
from employee E
where E.birth_date >= '2000-01-01'
);
다음 방법들로 원하는 값 가져 올 수 있다.
AND E.birth_date IS NOT NULL