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
을 모두 제거한 고유한 값의 개수를 셉니다.