본문 바로가기

DATABASE

SQL로 데이터 조회하기! NULL의 의미와 three-valued logic이 무엇인지 배워봅니다!

728x90
반응형
SMALL

이 글은 다음 유튜브 영상을 참조해 작성했습니다.

https://youtu.be/y_7rOoOodCY

NULL

SQL에서 NULL의 의미

- unknown

알려지지 않았다.

- unavailable or withheld

본인의 정보를 공개하지 않은 경우(정보를 이용할 수 없다)

- not applicable

적용이 불가한 경우(해당사항이 없는 경우)

 

위 쿼리문은 Empty set을 리턴하지만 이 결과가 맞다고 생각하면 안된다.

우선 NULL과 비교연산자로 = 기호를 사용하면 안된다.

mysql> SELECT id FROM employee WHERE birth_date IS NULL;

위 쿼리문과 같이 IS라는 키워드를 사용해야 한다.

IS의 반대의 경우 IS NOT키워드를 사용하면 된다.

NULL과 Three-Valued Logic

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

- UNKNWON은 '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
AND TRUE FALSE UNKNOWN
TRUE TRUE FALSE UNKNOWN
FALSE FALSE FALSE FALSE
UNKNOWN UNKNOWN FALSE UNKNOWN
OR TRUE FALSE UNKNOWN
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE UNKNOWN
UNKNOWN TRUE UNKNOWN UNKNOWN
NOT
TRUE FALSE
FALSE TRUE
UNKNOWN UNKNOWN

WHERE절의 condition(s)

- where절에 있는 condition(s)의 결과가 TRUE인 tuple(s)만 선택 된다

- 즉, 결과가 FALSE거나 UNKNOWN이면 tuple은 선택되지 않는다.

NOT IN 사용 시 주의 사항

v NOT IN (v1, v2, v3)는 아래와 같은 의미이다

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

만약 v1, v2, v3중에 하나가 NULL이라면?

NOT IN 예제 결과
3 not in (1,2,4) TRUE
3 not in (1,2,3) FALSE
3 not in (1,3,NULL) FALSE
3 not in (1,2,NULL) UNKNOWN

 

728x90
반응형
LIST