Home » SQL » BASIC » sql null 값과 널 체크 하는 방법을 알아봅시다.

sql null 값과 널 체크 하는 방법을 알아봅시다.

sql에서 null 값은 흔히 볼 수 있습니다. 예를 들어, 회원 가입을 할 때 이메일 인증이나 휴대폰 인증을 받는다고 해 보겠습니다. 만약에 이메일 인증만 받았다면, 휴대폰 번호는 없을 수가 있습니다. 즉, 휴대폰 번호를 모를 수도 있다는 것입니다.

이 경우, 휴대폰 번호는 존재하지 않으니, 모르는 값이라고 할 수 있어요. 상태로 치면 true도 false도 아닌, 그냥 모르는 상태라고 생각하시면 됩니다.


[그림 1] null과 null을 비교하는 1번 쿼리

위에서 null 값은 그냥 모르는 상태라고 했습니다. 그러면 null = null의 결과는 어떻게 나올까요? null은 어떤 값이 나와도 상관 없다고 생각하시면 됩니다. 앞의 null값과 뒤의 null 값을 각각 a, b라 하겠습니다. a가 1일 수도 있고 2일 수도 있습니다. 그리고 b가 1일 수도 있고 2일 수도 있겠네요.

이는 모르는 상태이기 때문에 가능합니다. 1 = 1은 true이지만 1 = 2는 false 입니다. 따라서 알 수 없습니다. 결과를 보겠습니다.

[그림 2] 1번 쿼리의 결과

null이 나왔습니다. 당연한 이야기입니다. 이제 몇 가지 복잡한 예제를 더 보겠습니다.

[그림 3] 2번 쿼리

2번 쿼리를 보겠습니다. 하나는 null and true를, 다른 하나는 null and false를 출력합니다. 여기서 null은 참이 될 수도 있고 거짓이 될 수도 있습니다. 1번째의 경우, true and true는 참이지만, false and true는 거짓입니다. 참이 될 수도 있고 거짓이 될 수도 있기 때문에 null 입니다. 알 수 없는 상태입니다.

반대로 null and false를 봅시다. and 조건으로 이어져 있을 때 상태 하나라도 false이면 무조건 false 입니다. 따라서 false입니다. res는 null이, res2는 false가 출력되었습니다.

[그림 4] 3번 쿼리

반대로, 3번 쿼리는 어떨까요? null or true가 있고, null or false가 있습니다. or 조건의 경우 하나라도 true가 걸리면 참이 됩니다. 그러니, res는 true입니다. 2번째는 null or false입니다. true or false는 참이지만, false or false는 거짓이므로, 이 경우는 알 수 없습니다.

따라서, res는 true, res2는 알 수 없는 상태로 출력이 됩니다.

[그림 5] 4번 쿼리

not (null)은 어떨까요? 참인지 거짓인지 모르는 상태인데 앞에 not을 붙여도 달라질 것이 없습니다. 따라서, 이 경우 알 수 없는 상태입니다. 정리하면 알 수 없는 상태가 nil 이라고 생각하시면 되겠습니다.


그러면 null 값 비교는 어떻게 해야 할까요? is null은 널 값인지, is not null은 널 값이 아닌지 체크 합니다. = 비교가 아닌 점에 주목해 주세요.

널 값은 널인가요? 네. 따라서, true가 출력됩니다.

2 is null은 어떨까요? 2가 널 값인가요? 아닙니다. 값을 알 수 있는 상태입니다. 따라서, 이 경우 false가 출력됩니다. 만약에, 널 값이 아닌지 체크하고 싶다면, is not null을 사용하면 됩니다.

2는 널 값이 아닌가요? 맞습니다. 왜냐하면, 2는 알 수 없는 값이 아니기 때문입니다.

하지만 알 수 없는 값은 알 수 있는 값이 아닙니다. 따라서, false입니다. 통계 같은 것으로 수집할 때, 널 값은 처리하기가 곤란하기 때문에, 다른 값으로 대치를 많이 하곤 해요. postgres에는 coalesce 함수가 있습니다. 이 에 관련된 설명이 있습니다. 널 값이면 다른 값으로 대체를 많이 하는 편이므로, 알아두시면 좋습니다.

  • postgres colaesce 함수로 nil을 다른 값으로 대체해 봅시다. 링크

Leave a Comment

20 + 6 =