MySQL에서 COUNT() 함수를 사용해 특정 열에 저장된 값을 셀 때, 해당 열에 NULL 값이 포함되어 있다면 MySQL은 NULL을 무시하고 NULL이 아닌(non-NULL) 값만 계산하여 결과를 반환합니다.
예제 데이터 확인
이를 이해하기 위해 다음과 같은 데이터가 저장된 'Employee' 테이블을 사용해 보겠습니다.
mysql> Select * from Employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000 | | 3 | Advik | 25000 | | 4 | Aarav | 65000 | | 5 | Ram | 20000 | | 6 | Mohan | 30000 | | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+--------+--------+ 8 rows in set (0.00 sec)
위 테이블에는 총 8개의 행이 있으며, 그중 'Salary' 열의 7번(Aryan)과 8번(Vinay) 행에는 NULL 값이 저장되어 있습니다.
COUNT() 함수 적용하기
이제 'Salary' 열에 COUNT() 함수를 적용하는 다음 쿼리를 실행해 보겠습니다.
mysql> Select COUNT(salary) from Employee; +---------------+ | COUNT(salary) | +---------------+ | 6 | +---------------+ 1 row in set (0.15 sec)
결과 분석
위 결과 집합에서 알 수 있듯이, 전체 행은 8개이지만 COUNT(salary)는 6을 반환했습니다. 이는 MySQL이 NULL 값을 무시하고 NULL이 아닌 값만 계산했기 때문입니다.
COUNT(*)와의 차이점
참고로, NULL 값까지 포함한 전체 행 수를 구하려면 COUNT(*)를 사용하면 됩니다. COUNT(*)는 특정 열의 값과 관계없이 테이블의 모든 행을 계산합니다.
mysql> Select COUNT(*) from Employee; +----------+ | COUNT(*) | +----------+ | 8 | +----------+ 1 row in set (0.00 sec)
정리하면, COUNT(열 이름)은 해당 열에서 NULL이 아닌 값의 개수만 반환하고, COUNT(*)는 NULL 여부와 상관없이 테이블의 전체 행 수를 반환합니다. 두 함수의 차이를 정확히 이해하면 데이터 집계 시 실수를 줄일 수 있습니다.