728x90
Three-Valued Login
논리 시스템에서 세 가지 논리값 - TRUE, FALSE, UNKNOWN을 허용하는 개념입니다.
데이터베이스(SQL)와 프로그래밍에서 NULL 값을 다룰 때 사용됩니다.
Three-Valued Logic 개념
일반적으로 논리 연산은 이진 논리(Binary Logic, TRUE/FALSE) 를 기반으로 하지만 Three-Valued Logic (3VL)에서는 다음과 같은 세 가지 값을 가집니다.
TURE
FALSE
UNKNOWN
(알 수 없음)
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