DB/mysql

[sql] Null의 연산

  • -

Database에서 null은 이리 저리 처리해야하는 상황이 많아서 매우 피곤하다. 이번 포스트에서는 다양한 상황에서 null과의 연산에 대해 살펴보자.

참고로 테스트는 mysql에서 진행하였는데 필자가 아는 한 대부분 DB가 동일하다.

 

 

select null+1, null-1, null*1, null/1 from dual;

 

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이다.

 

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.