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 :
댓글 없음:
댓글 쓰기