Database에서 null은 이리 저리 처리해야하는 상황이 많아서 매우 피곤하다. 이번 포스트에서는 다양한 상황에서 null과의 연산에 대해 살펴보자.
참고로 테스트는 mysql에서 진행하였는데 필자가 아는 한 대부분 DB가 동일하다.
null의 연산
산술 연산: 언제나 null
select null+1, null-1, null*1, null/1 from dual;
문자열 결합 연산: null
select concat(1, null, 2) from dual;
비교연산
이 부분이 가장 헷갈리는 부분이다. 비교 연산에서 null은 "무엇이든 될 수 있고 무엇도 될수 없는 값이다." (뭐래니.. unknown이라고도 한다. 즉 fix 할 수 없다는 이야기다.)
아래의 표를 살펴보자.
연산자 |
true |
false |
null |
null과의 연산 설명 |
! |
false |
true |
null |
null은 true일 수도 있고 false일 수도 있어서 !null의 값을 정확히 결정할 수 없다. 따라서 null이다. |
true & |
1 |
0 |
null |
null이 true이면 1, false이면 0이므로 최종 값도 unknown 즉 null이다. |
false & |
0 |
0 |
0 |
null이 어떤 값이 되더라도 false & 이기 때문에 결과는 false이다. |
null & |
null |
0 |
null |
null & false는 확실히 false이지만 나머지는 알 수 없다. 따라서 unknown 즉 null이다. |
true or |
1 |
1 |
1 |
하나라도 true 이므로 null이 어떻게 평가 되더라도 true이다. |
false or |
1 |
0 |
null |
null이 false면 0, true 였다면 1 이므로 평가할 수 없다. unknown 즉 null이다. |
null or |
1 |
null |
null |
true가 하나라도 개입되면 1이지만 나머지는 모두 결과를 알 수 없다. 즉 null이다. |