문제
고객 테이블에는 고객번호(NOT NULL)와 집주소 컬럼이 있고, 일부 고객은 집주소가 입력되지 않아 NULL이다. '집주소가 입력되지 않은(NULL) 고객의 수'를 구하는 식으로 옳은 것은?
① COUNT() ② COUNT(집주소) ③ COUNT(고객번호) - COUNT(집주소) ④ COUNT() - COUNT(고객번호)
정답
3번
해설
정답은 ③이다.
COUNT(컬럼)은 해당 컬럼이 NULL인 행을 세지 않는다. 고객번호는 NOT NULL이라 COUNT(고객번호)는 전체 고객 수와 같고, COUNT(집주소)는 집주소가 있는(NULL이 아닌) 고객 수다. 따라서 두 값을 빼면 집주소가 NULL인 고객 수가 나온다.
오답 풀이 ① COUNT()는 NULL 여부와 무관하게 모든 행(전체 고객)을 세므로 집주소 없는 고객만 세지 못한다. ② COUNT(집주소)는 오히려 집주소가 '있는' 고객 수라 정반대다. ④ 고객번호가 NOT NULL이면 COUNT()와 COUNT(고객번호)가 같아 결과가 항상 0이 되어 의미가 없다.
보충: COUNT(*)는 NULL 포함 전체 행, COUNT(컬럼)은 그 컬럼의 NOT NULL 행만 센다. 이 차이를 이용해 '전체 - 값이 있는 수 = NULL의 수'를 계산할 수 있다.