AND, OR, NOT 연산을 할 때 unknown 값은 어떻게 처리할 것인가?
'!=' 또는 NOT 연산을 할 때 NULL 값은 어떻게 처리되는지 알아보고자 한다.

item table
 item_pk item_class  item_name 
 과일  사과 
2  과일  바나나 
3  고기  삼겹살 
4  과일  NULL

select * from item where item_class='과일' and item_name != '사과'

결과는 어떻게 나올거 같은가?
보통 생각하기로

 item_pk item_class  item_name 
2  과일  바나나 
4  과일  NULL

이렇게 나올 것이라 생각하는데 정답은 아래처럼 나온다.

 item_pk item_class  item_name 
2  과일  바나나 

원인은 '!=' 또는 NOT 연산 처리를 할 때 NULL 값은 unknown으로 판단하여 값을 나타내지 않는다.
NULL을 포함하게 하려면,

select *
from item
where item_class='과일' and (item_name != '사과' and item_name is null)

라고 해야되겠다.

NULL 값이 있을 경우에 조심해야겠다.

+ Recent posts