삼진 논리

삼진 논리 (Ternary Logic)

SQL 표준에 명시된 대로, 삼진 논리(ternary logic, 3VL)는 TRUE, FALSE, UNKNOWN 세 가지 진릿값을 갖는 논리 체계예요. Snowflake에서 UNKNOWNNULL로 표현됩니다. 삼진 논리는 불리언 표현식과 술어(predicate)의 평가에 적용되며, AND, OR, NOT 같은 논리 연산의 결과에도 영향을 줘요.

출처: Snowflake SQL Reference

본문

삼진 논리는 다음과 같이 적용돼요.

  • 표현식에 쓰일 때(예: 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로 평가돼요.

더 알아보기 (Learn more)