AND, OR, NOT 연산을 할 때 unknown 값은 어떻게 처리할 것인가?
'!=' 또는 NOT 연산을 할 때 NULL 값은 어떻게 처리되는지 알아보고자 한다.
item table
item_pk | item_class | item_name |
1 | 과일 | 사과 |
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)
from item
where item_class='과일' and (item_name != '사과' and item_name is null)
라고 해야되겠다.
NULL 값이 있을 경우에 조심해야겠다.
'Technology > Database' 카테고리의 다른 글
MySQL / Join 중복문제 (0) | 2010.04.06 |
---|---|
MySQL / MySQL Query Performance Tips(쿼리 성능 팁) (0) | 2010.03.20 |
MySQL / MySQL 튜닝 (0) | 2010.02.10 |
MySQL / 데이터베이스의 생성과 삭제 (0) | 2010.02.10 |
MySQL / MySQL 명령어 정리 (0) | 2010.02.07 |