728x90
Three-Valued Login
논리 시스템에서 세 가지 논리값 - TRUE, FALSE, UNKNOWN을 허용하는 개념입니다.
데이터베이스(SQL)와 프로그래밍에서 NULL 값을 다룰 때 사용됩니다.
Three-Valued Logic 개념
일반적으로 논리 연산은 이진 논리(Binary Logic, TRUE/FALSE) 를 기반으로 하지만 Three-Valued Logic (3VL)에서는 다음과 같은 세 가지 값을 가집니다.
TUREFALSEUNKNOWN(알 수 없음)
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 |
X | FALSE |
UNKNOWN |
FALSE AND X |
FALSE |
FALSE |
FALSE |
TRUE OR X |
TRUE |
TRUE |
TRUE |
FALSE OR X |
X | 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이므로, 최종 결과는UNKNOWN->FALSE가 됩니다WHERE절에서TRUE인 행만 결과로 반환됩니다.UNKNOWN은FALSE처럼 취급되므로,age가NULL인 행은 결과에서 제외됩니다.
3. NOT 연산자
SELECT * FROM Users WHERE NOT (age > 30);
age > 30이UNKNOWN이면,NOT UNKNOWN은 여전히UNKNOWN입니다.- 따라서
WHERE절에서 필터링 되지 않습니다.
Three-Valued Logic을 고려한 SQL 코드 예시
IS NULL 또는 IS NOT NULL 사용 / NULL 값을 올바르게 처리하는 가장 기본적인 방법입니다.
SELECT * FROM Users WHERE age IS NOT NULL;
정리
- SQL에서 NULL값은
UNKNOWN상태이므로 직접 비교(=, !=)가 불가능 IS NULL을 활용하여 NULL을 처리해야 함- 논리 연산(
AND,OR,NOT)에서 NULL값이UNKNOWN으로 처리될 수 있음
728x90