728x90
반응형
Three-Valued Logic
논리 시스템에서 세 가지 논리값 - TRUE, FALSE, UNKNOWN을 허용하는 개념입니다.
데이터베이스(SQL)와 프로그래밍에서 NULL 값을 다룰 때 사용됩니다.
Three-Valued Logic 개념
일반적으로 논리 연산은 2값 논리(Two-Valued Logic, TRUE/FALSE)를 기반으로 하지만, Three-Valued Logic(3VL)에서는 TRUE, FALSE, UNKNOWN의 세 가지 논리값을 사용합니다.
- TRUE
FALSEUNKNOWN(알 수 없음)
Three-Valued Logic이 필요한 이유
SQL에서는 NULL 값이 존재하기 때문에, 단순한 참/거짓 논리로 처리할 수 없는 경우가 발생합니다.
- NULL = NULL ? TRUE가 아니라 UNKNOWN이 됩니다.
SQL에서 Three-Valued Logic 적용 예시
SELECT * FROM Users WHERE age > 30;
위 쿼리는 age값이 NULL인 행들을 제외하고 결과를 반환합니다. 이유는 NULL > 30의 결과가 FALSE가 아니라 UNKNOWN이 되기 때문입니다.
3VL 연산 규칙
| 연산 | TRUE |
FALSE |
UNKNOWN |
|---|---|---|---|
TRUE AND X |
TRUE | FALSE |
UNKNOWN |
FALSE AND X |
FALSE |
FALSE |
FALSE |
TRUE OR X |
TRUE |
TRUE |
TRUE |
FALSE OR X |
TRUE | FALSE |
UNKNOWN |
NOT TRUE |
FALSE |
||
NOT FALSE |
TRUE |
||
NOT UNKNOWN |
UNKNOWN |
Three-Valued Logic의 주요 특징
1. NULL 값 비교 연산
SELECT * FROM Users WHERE age = NULL; -- 결과 없음!
이 쿼리는 NULL을 포함하는 행을 반환하지 않습니다.
대신, NULL 값을 비교하려면 IS NULL을 사용해야 합니다.
SELECT * FROM Users WHERE age IS NULL;
2. NULL 값의 논리 연산
SELECT * FROM Users WHERE age > 30 AND age < 50;
- age가 NULL이면 NULL > 30과 NULL < 50이 모두 UNKNOWN이므로, AND 연산의 최종 결과도 UNKNOWN입니다. WHERE 절은 TRUE로 평가된 행만 반환하므로 age가 NULL인 행은 결과에서 제외됩니다.
3. NOT 연산자
SELECT * FROM Users WHERE NOT (age > 30);
age > 30이UNKNOWN이면,NOT UNKNOWN은 여전히UNKNOWN입니다.- WHERE 절은 TRUE로 평가된 행만 반환하므로, age가 NULL인 행은 결과에서 제외됩니다.
Three-Valued Logic을 고려한 SQL 코드 예시
IS NULL 또는 IS NOT NULL 사용 / NULL 값을 올바르게 처리하는 가장 기본적인 방법입니다.
SELECT * FROM Users WHERE age IS NOT NULL;
정리
- NULL과의 일반 비교(=, <>, !=)는 TRUE가 아니라 UNKNOWN이 되므로 WHERE 조건에 사용할 수 없음
IS NULL을 활용하여 NULL을 처리해야 함- 논리 연산(
AND,OR,NOT)에서 NULL값이UNKNOWN으로 처리될 수 있음
728x90
반응형