삼진 논리
삼진 논리 (Ternary Logic)
SQL 표준에 명시된 대로, 삼진 논리(ternary logic, 3VL)는 TRUE, FALSE, UNKNOWN 세 가지 진릿값을 갖는 논리 체계예요. Snowflake에서 UNKNOWN은 NULL로 표현됩니다. 삼진 논리는 불리언 표현식과 술어(predicate)의 평가에 적용되며, AND, OR, NOT 같은 논리 연산의 결과에도 영향을 줘요.
본문
삼진 논리는 다음과 같이 적용돼요.
- 표현식에 쓰일 때(예:
SELECT목록에서)UNKNOWN결과는NULL값으로 반환됩니다. - 술어로 쓰일 때(예:
WHERE절에서)UNKNOWN결과는FALSE로 평가돼요.
진리표 (Truth tables)
이 절은 비교 연산자와 논리 연산자에 대한 진리표를 설명해요.
비교 연산자
비교 연산자의 피연산자 중 하나라도 NULL이면 결과는 NULL이에요. 비교 연산자와 함수는 다음과 같습니다.
=,!=,<><,<=,>,>=GREATEST,LEAST
논리 연산자
BOOLEAN 컬럼 C가 주어졌을 때:
| C가 | C AND NULL 결과 |
C OR NULL 결과 |
NOT C 결과 |
|---|---|---|---|
TRUE |
NULL |
TRUE |
FALSE |
FALSE |
FALSE |
NULL |
TRUE |
NULL |
NULL |
NULL |
NULL |
추가로:
| C가 | C AND (NOT C) 결과 |
C OR (NOT C) 결과 |
NOT (C OR NULL) 결과 |
|---|---|---|---|
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
NULL |
NULL |
NULL |
NULL |
NULL |
조건부 표현식 사용 참고 사항
IFF 동작
IFF는 삼진 논리에 대해 다음과 같은 결과를 반환해요. BOOLEAN 컬럼 C가 주어졌을 때:
| C가 | IFF(C, e1, e2) 결과 |
|---|---|
TRUE |
e1 |
FALSE |
e2 |
NULL |
e2 |
[ NOT ] IN 동작
[ NOT ] IN은 삼진 논리에 대해 다음과 같은 결과를 반환합니다. 세 개의 숫자 컬럼 c1, c2, c3가 주어졌을 때:
c1 IN (c2, c3, ...)은 구문상(c1 = c2 OR c1 = c3 OR ...)과 동등해요.- 그 결과,
c1값이NULL이면c1 IN (c2, c3, NULL)표현식은 항상NULL로 평가됩니다. c1 NOT IN (c2, c3, ...)은 구문상(c1 <> c2 AND c1 <> c3 AND ...)과 동등해요.- 따라서
c1 NOT IN (c2, c3)이TRUE라도,c1 NOT IN (c2, c3, NULL)은NULL로 평가돼요.