COUNT 함수는 SQL에서 행의 수를 세는 가장 기본적인 집계 함수입니다. SQLD 시험에서는 COUNT(*)와 COUNT(컬럼명)의 미묘한 차이점, 그리고 NULL 값 처리 방식에 대한 문제가 자주 출제됩니다.
COUNT(*): 테이블의 전체 행(Row) 수를 카운트합니다. NULL 값이 포함된 행도 모두 셉니다.COUNT(컬럼명): 특정 컬럼의 NULL이 아닌 값들만 카운트합니다.COUNT(DISTINCT 컬럼명): 특정 컬럼에서 중복을 제거한 후 NULL이 아닌 값들만 카운트합니다.| user_id | user_name | city |
|---|---|---|
| 1 | Kim | Seoul |
| 2 | Lee | Busan |
| 3 | Park | NULL |
| 4 | Kim | Daejeon |
| 5 | Choi | Seoul |
| 6 | NULL | Busan |
-- 1. 모든 행의 수를 셉니다.
SELECT COUNT(*) FROM Users; -- 결과: 6 (총 6개 행)
-- 2. user_name이 NULL이 아닌 행의 수를 셉니다.
SELECT COUNT(user_name) FROM Users; -- 결과: 5 (NULL인 6번 행 제외)
-- 3. city 컬럼의 NULL이 아닌 값의 수를 셉니다.
SELECT COUNT(city) FROM Users; -- 결과: 5 (NULL인 3번 행 제외)
-- 4. user_name의 유일한 값의 수를 셉니다. (중복, NULL 제외)
SELECT COUNT(DISTINCT user_name) FROM Users; -- 결과: 4 (Kim, Lee, Park, Choi)
COUNT(*) vs COUNT(컬럼명): 가장 중요한 구분점은 NULL 값의 포함 여부입니다.COUNT(*)는 NULL을 포함하여 전체 행 수를 세고, COUNT(컬럼명)은 NULL을 제외합니다.COUNT(DISTINCT 컬럼명): 중복된 값과 NULL을 모두 제외하여 고유한 값의 개수만 반환합니다.COUNT(상수): COUNT(1), COUNT('A') 등은 상수가 NULL이 될 수 없으므로 COUNT(*)와 동일한 결과를 반환합니다.NULL vs 0: NULL은 '값이 없음'이지만, 0은 유효한 값입니다. COUNT(0)은 0을 NULL이 아닌 값으로 인식하여 COUNT(*)와 동일하게 처리합니다.COUNT(*) → **별**처럼 모든 것을 센다.COUNT(컬럼) → **컬럼**에 **NULL**이 있는지 확인 후 센다.COUNT(DISTINCT) → **중복**을 빼고 센다.1. 다음 중 COUNT(*)와 COUNT(컬럼명)의 차이를 가장 잘 설명한 것은?
A. 두 함수 모두 NULL을 제외한다.
B. COUNT(*)는 NULL 포함, COUNT(컬럼명)은 NULL 제외.
C. COUNT(*)는 전체 행 수, COUNT(컬럼명)은 중복만 제외.
D. 두 함수는 완전히 동일하다.
2. 아래 Users 테이블이 있을 때, 다음 SQL의 결과는?
| user_id | user_name |
| :--- | :--- |
| 1 | Kim |
| 2 | Lee |
| 3 | NULL |
| 4 | Kim |
| 5 | NULL |
SELECT COUNT(DISTINCT user_name) FROM Users;
A. 5
B. 3
C. 2
D. 1
3. 다음 중 COUNT(*)와 결과가 다른 것은?
A. COUNT(1)
B. COUNT('A')
C. COUNT(NULL)
D. COUNT(0)
4. 시험 문제로 자주 등장하는 함정: COUNT(DISTINCT 컬럼)의 특징으로 옳은 것은?
A. NULL은 카운트한다.
B. 중복만 제거하고 NULL은 포함한다.
C. 중복과 NULL 모두 제거한다.
D. COUNT(*)와 같다.
COUNT(*)는 테이블의 모든 행 수를 세므로 NULL을 포함하고, COUNT(컬럼명)은 해당 컬럼에 NULL 값이 있는 행을 제외하고 셉니다.COUNT(DISTINCT user_name)은 NULL을 제외하고 중복된 'Kim'을 하나로 세므로, 결과는 'Kim'과 'Lee'의 개수인 2가 됩니다.COUNT(NULL)은 NULL이 값이 아니므로 항상 0을 반환합니다. COUNT(1), COUNT('A'), COUNT(0)은 모두 NULL이 될 수 없는 유효한 값이므로 COUNT(*)와 동일한 결과를 반환합니다.DISTINCT 키워드는 중복을 제거하고, COUNT 함수는 NULL을 제외하므로, COUNT(DISTINCT 컬럼)은 중복과 NULL을 모두 제거한 고유한 값의 개수를 셉니다.