[데이터베이스] NULL의 의미 (feat. three-valued logic)

Yoon Uk·2023년 3월 10일
0

데이터베이스

목록 보기
3/20
post-thumbnail

참고 - YouTube: 쉬운코드

1. SQL에서 NULL의 의미

  • unknown : 아직 알려지지 않았다는 뜻

  • unavailable or withheld : 보안상의 이유 등으로 정보를 공개하지 않아 DB에 저장되지 않았다는 뜻

  • not applicable : 아예 해당사항이 없다는 뜻

2. NULL을 찾는 비교연산자

SQL에서 NULL을 찾을 때 = 비교연산자를 사용하면 안됩니다.

예를 들어

SELECT id FROM employee WHERE birth_date = NULL;

위의 쿼리문을 작성한다면

Empty set (0.00 sec)

이러한 결과가 나오게 됩니다.

= 연산자 대신 IS 연산자를 사용해야 아래와 같은 결과가 나오게 됩니다.

SELECT id FROM employee WHERE birth_date IS NULL;

위의 내용을 이해하기 위해서 three-valued logic에 대해 알아보겠습니다.

3. three-valued logic

SQL에서 NULL과 비교 연산을 하게 되면 그 결과는 UNKNOWN이 됩니다.

1) SQL에서 UNKNOWN의 의미

UNKNOWNTrue 일수도 있고 FALSE일 수도 있다라는 의미입니다.

여기서 three-valued logic은 비교/논리 연산의 결과로 3가지 상태,
즉, TRUE, FALSE, UNKNOWN을 가진다는 뜻입니다.

2) UNKNOWN의 비교 연산 결과

위 표의 결과에 나오는 것처럼 NULL과의 비교연산의 결과는 UNKNOWN이 됩니다.

NULL이 1일 수도, 1이 아닐 수도 있는 데이터이기 때문에 True, False 판단을 하지 못하는 것입니다.


TRUE, FALSE, UNKNOWNAND, OR, NOT 연산의 결과는 아래와 같습니다.

  • AND 연산

TRUEUNKNOWN의 연산에서 UNKNOWNTrue일지 False일지 알 수 없기 때문에 UNKNOWN 이라는 결과가 나오게 됩니다.


  • OR 연산

FALSEUNKNOWN의 연산에서 UNKNOWNTrue일지 False일지 알 수 없기 때문에 UNKNOWN 이라는 결과가 나오게 됩니다.


  • NOT 연산

4. 쿼리 작성 시 주의 사항

WHERE절에서 NOT IN 사용 시 주의 사항

WHERE 절에서는 WHERE 절에 있는 조건의 결과가 TRUE인 tuple만 선택됩니다.
즉, 조건의 결과가 FALSE이거나 UNKNOWN 이라면 tuple은 선택되지 않습니다.

예를 들어
v NOT IN(v1, v2, v3)은 아래와 같은 의미입니다.

v != v1 AND v! = v2 AND v != v3

만약 v1, v2, v3 중에 하나가 NULL 이어서 결과가 UNKNOWN이 된다면 해당 tuple은 선택되지 않습니다.

0개의 댓글