SQL에서 데이터를 집계할때 가장 많이 사용하는 함수가 COUNT이다. 하지만 COUNT(*)와 COUNT(컬럼)의 차이를 정확하게 이해하지 못한상태로 사용하는 경우가 많다. 오늘은 그 둘의 차이를 알라보려고 한다. 두개는 비슷해 보이지만 동작방식과 결과가 완전히 다르기 때문에 정확히 알아보자...!
1. COUNT 함수 기본 개념
COUNT함수는 행의 개수를 세는 집계함수이다. 하지만 어떤것을 기준으로 하느냐에 따라 결과가 달라진다...!
COUNT(*)
COUNT(컬럼)
보기에는 둘다 행의 개수를 세는거처럼 보이지만 NULL처리 방식에서 결정적인 차이가 있다 알아보자...!
2. COUNT(*)
COUNT(*)는 조건에 맞는 모든 행의 개수를 센다. 여기서 중요한것이 컬럼 값이 NULL이든 아니든 상관없이 행 자체가 존재하면 무조건 카운트 된다는 것...!
- EMP 테이블에 행이 10개 있으면 결과는 무조건 10이다.
- 컬럼 값에 NULL이 있어도 영향이 없다...!
- NULL의 여부를 신경쓰지 않고 전체 데이터 개수를 알고싶을때 사용하자.
SELECT COUNT(*)
FROM EMP;
3. COUNT(컬럼)
COUNT(컬럼)은 해당 컬럼의 값이 NULL이 아닌 행만 카운트 한다.
- COMM컬럼 값이 NULL인 행은 제외한다.
- 실제로는 값이 존재하는 데이터 개수를 센다.
SELECT COUNT(COMM)
FROM EMP;
4. 예제
EMP 테이블
| EMPNO | ENAME | COMM |
| 1001 | A | NULL |
| 1002 | B | 300 |
| 1003 | C | NULL |
| 1004 | D | 500 |
SELECT COUNT(*)
FROM EMP;
--결과
4
SELECT COUNT(COMM)
FROM EMP;
--결과
2
5. WHERE조건과 함께 사용할 때 주의할점
- WHERE조건으로 먼저 행을 걸러낸뒤에
- 그 결과에서 COMM컬럼이 NULL이 아닌 행만 카운트 한다.
- 순서를 이해하지 못하면 왜 이런결과가 나오는지 이해가 안갈것이다.
SELECT COUNT(COMM)
FROM EMP
WHERE DEPTNO = 10;
마무리
오늘은 COUNT(*)와 COUNT(컬럼)에 차이에 대해 알아보았다. 이 부분은 쿼리를 작성하다 보면 실수도 할수 있는 부분이라고 생각한다. 두개는 모두 개수를 센다라는 공통점을 가지고 있지만 무엇을 기준으로 세냐의 차이다. COUNT(*)은 무조건 행 자체를 카운트 한다고 생각하면되고 COUNT(컬럼)은 컬럼값의 존재 여부를 카운트 한다. 컬럼 값이 아예 없는 NULL이면 행은 아예 없는것처럼 취급한다. 의도적으로 NULL을 제외하고 카운트 하고싶으면 적절하게 사용하면 될것같다. 오늘 정리한 이부분은 실무에서도 헷갈리다고 생각하여 정리를 해보았다. 감사합니다. (_ _)
'오라클' 카테고리의 다른 글
| [오라클] UNION vs UNION ALL 차이 완벽 정리 (0) | 2026.01.19 |
|---|---|
| [오라클] PARTITION BY 완벽 정리 (0) | 2026.01.17 |
| [오라클] DELETE vs DROP vs TRUNCATE 완벽 정리 (0) | 2026.01.16 |
| [오라클] DROP 문 완벽 정리 (1) | 2026.01.15 |
| [오라클] ALTER 문 완벽 정리 (0) | 2026.01.14 |