[ SQL ] Query 작성 시 count() 함수의 함정
많은 개발자들이 Database Query 작성할때 습관적으로 ... count(*) ... 이렇게 사용하는 사람들이 많다.
대개의 경우 큰 문제가 생기지는 않으나, 혹 실행 결과값이 다를 수 있음을 인지하고 사용하는 개발자는 그리 많지 않은 듯 하다. 바로 Field의 값이 Null 이냐 아니냐에 따라 리턴되는 count() 함수의 결과값이 달라질 수 있다. 예제를 보자
예제에서 사용한 테이블 t1 은 간단하게 Nullable 속성의 2개 필드를 가지고 있고, PrimaryKey 설정도 하지 않았으며, 테스트를 위한 Record 6개를 넣은 후 전체 조회한 결과는 우측 이미지와 같다.
다음과 같이 3개의 쿼리를 던져보면 받는 결과값이 다름을 알 수 있으며, 필자가 얘기하려는 바가 무엇인지 바로 알 수 있을 것이다.
그렇다. 바로 NULL 데이터의 유무에 따라 결과값이 달라지는 것 이다.
count(*) 의 경우 NULL 도 데이터로 인식하기 때문에 Counting 에 포함되지만, 필드를 지정하면 해당 필드의 Value 가 NULL 인 녀석들은 Counting 에서 제외 된다.
프로젝트 진행 시 Logical 오류를 디버깅할 경우는 너무도 비일비재 하다. 혹시 Query의 결과값 갯수가 예상과 다르다면 이러한 부분을 잘 살펴보기 바란다. Error번호라도 뱉어내면 바로 수정할 수 있겠지만 예상과 다른 리턴값을 받으면 골치 아프다. (사실 대부분의 개발자들이 에러가 안나면, 결과값에 대한 의심을 못하고 다른 곳만 열나게 수정하다가 DB 가 문제라고 하는 이들도 허다하다. 예전에 잘난척 오진 울 직원 하나도 그랬는데... 개뿔~~ 쭉정이였다. 누구라고는 말 못해. ㅋㅋ)
암튼, count() 함수 사용 시 count(*) 와 count(컬럼명) 의 차이점에 대해 명확히 인지하고, 잘 사용하자.
안 그럼 소중한 시간 낭비 후에 DB가 꼬졌다는 둥, 업그레이드를 해야 한다는 둥 말도 안되는 소리만 지껄이게 된다.