2010년 3월 14일 일요일

Truth table for three-valued logic & NULL

 x

y

x AND y

x OR y

NOT x 

 TRUE

 TRUE

 TRUE

 TRUE

FALSE

 TRUE

 UNKNOWN

 UNKNOWN

 TRUE

FALSE

 TRUE

FALSE 

FALSE

 TRUE

FALSE

 UNKNOWN

 TRUE

 UNKNOWN

 TRUE

 UNKNOWN

 UNKNOWN

 UNKNOWN

 UNKNOWN

 UNKNOWN

 UNKNOWN

 UNKNOWN

FALSE

FALSE

 UNKNOWN

 UNKNOWN 

FALSE

 TRUE

FALSE

 TRUE

 TRUE

FALSE

 UNKNOWN

FALSE

 UNKNOWN

 TRUE

FALSE

FALSE

FALSE

FALSE

 TRUE

 

1. NULL 의 일반적인 정의

 1. Value unknown

   - 해당 값이 존재하지만 어떤 값인지 모르는 상태 말 그대로 "I don't Know" 예) 생일을 모른다.

 2. Value inapplicable

   - 해당 값에 적용 할수 없는 상태. 즉 해당 값에 해당하지 않는 상태를 말한다.

     예) 배우자 attribute 존재할때 결혼하지 않는 사람은 NULL 로 표시된다.

 3. Value withheld

   -  아직 적용하지 않은 상태, 1번과 비슷한 상태이지만, 모르는 상태가 아닌 아직 등록하지 않은 상태임

      예) 아직 등록되지 않은 전화번호 attrubute

 

아래와 같은 쿼리를 사용하여, NOT NULL 인 튜플들만 Projection 할수있다.

( NOT NULL 같은 제약조건을 걸지 않고..)

SELECT *

FROM Movies

WHERE length <= 120 OR length > 120;

 

length attribute 가 NULL 을 가지고 있다면,

어떤 튜플이 NULL 일 경우 NULL OR NULL 인 결과는 UNKNOWN 이게 된다.

논리 연산에서 결과가 UNKNOWN 인 경우는 결과집합에 포함이 안되므로,

결론적으로 위의 쿼리는 NULL 을 가지지 않는 length 의 모든 튜플을 Projection 하게 된다.

 

위의 쿼리를 가지고 NULL 도 결과 집합에 포함 하려면?

SELECT *

FROM Movies

WHERE length <= 120 OR length > 120 OR length IS NULL;

 

IS NULL 조건이 포함되면, 튜플이 NULL 일 경우의 결과는 TRUE 이다.

TRUE 과 NULL 의 OR 연산은 TRUE 이므로 NULL 도 결과집합에 포함된다.

 

Grouping, Aggregation

 

NULL 은 어떤 aggregation function 에도 무시된다.

하지만 count(*) 의 경우는 relation 의 총 튜플수를 리턴한다.

 

   A    |    B

-------------

NULL |  NULL

 

attribute 의 집합이 NULL 뿐일경우, aggregation 의 결과는 NULL 이다.

 

 

Reference :

DATABASE SYSTEMS : The Complete Book (Jeffrey D. Ullman)

댓글 없음:

댓글 쓰기