반응형
SQL에서 NULL의 의미
SQL에서 NULL은 세 가지의 의미를 가진다.
- unknown : 알려지지 않은 값
- unavailable or withheld : 이용할 수 없는 값(비공개)
- N/A(not applicable) : 존재하지 않는 값(적용할 수 없는)
A와 B의 생일이 둘 다 NULL 상태인 경우 이때, A와 B의 생일이 동일하다고 볼 수 없다.
이 경우 둘의 생일이 업데이트가 되지 않았거나 비공개 상태일 경우이며
같을 수도 있고, 다를 수 도 있다고 볼 수 있다.
NULL과의 비교연산
SQL에서 NULL과 비교 연산을 하게 되면 UNKNOWN이란 결과가 나오게 된다.
- UNKNOWN : TRUE 일 수도 있고, FALSE 일 수도 있다는 의미를 가진다.
- three-valued logic : 비교/논리 연산의 결과이며 TRUE, FALSE, UNKNOWN을 가진다.
비교 연산 예 | 결과 |
1 = 1 | TRUE |
1 != 1 | FALSE |
1 = NULL | UNKNOWN |
1 != NULL | |
1 > NULL | |
1 <= NULL | |
NULL = NULL |
NULL이라는 값이 실제로 유효한 값을 가질 수 있었다면 그 값이 어떤 값인지에 따라서
결과 값이 TRUE 이거나 FALSE 일 수도 있기 때문에 SQL에서는 UNKNOWN으로 처리한다.
= 한쪽에 NULL이 있으면 무조건 UNKNOWN 값이 나오게 된다
UNKNOWN을 포함한 논리연산
AND | TRUE | FALSE | UNKNOWN / NULL |
TRUE | TRUE | FALSE | UNKNOWN |
FALSE | FALSE | FALSE | FALSE |
UNKNOWN / NULL | UNKNOWN | FALSE | UNKNOWN |
AND는 두 피연산자가 TRUE 값을 가지고 있어야 TRUE를 반환하는 연산자이다.
TRUE AND UNKNOWN : UNKNOWN
OR | TRUE | FALSE | UNKNOWN / NULL |
TRUE | TRUE | TRUE | TRUE |
FALSE | FALSE | FALSE | UNKNOWN |
UNKNOWN / NULL | TRUE | UNKNOWN | UNKNOWN |
NOT | |
TRUE | FALSE |
FALSE | TRUE |
UNKNOWN / NULL | UNKNOWN |
- where절에 있는 condition의 결과가 TRUE인 tuple만 선택된다.
- 즉, 결과가 FALSE 이거나 UNKNOWN이면 그 tuple은 선택되지 않는다.
NOT IN 사용 시
v NOT IN (v1, v2, v3)
v != v1 AND v != v2 AND v != v3
가정 | 결과 |
1 not in (2, 3, 4) | TRUE |
1 not in (1, 2, 3) | FALSE |
1 not in (1, 2, null) | FALSE |
1 not in (2, 3, null) | UNKNOWN |
반응형
댓글