COUNT(*)의 COUNT(1) 차이는??
결론부터 말하면 차이가 없다입니다.
You Asked
What is the difference between count(1) and count(*) in a sql query
eg.
select count(1) from emp;
and
select count(*) from emp;
and we said…
nothing, they are the same, incur the same amount of work – do the same thing, take the same amount of resources.
출처: ORACLE Ask TOM
위 출처를 보면 동일한 수의 블록 읽기/쓰기/처리와 같은 CPU 사용 시간, 수행 시간을 갖는다고 합니다.
그렇다면 COUNT(*)과 COUNT(컬럼)은?
이것도 결론부터 말하면 차이가 존재한다입니다. NULL 값에 대해서 카운팅을 하냐 안하냐의 차이가 존재합니다.
COUNT(컬럼) - NULL 값이 들어간 행은 카운트하지 않습니다.
COUNT(*) - NULL 값에 상관없이 모든 행을 카운트합니다.
사실 이 차이는 컬럼을 지정하여 COUNT 하는 경우 값이 NULL이면 세지 않는 게 당연합니다. 즉, 전체 행의 개수를 세려고 했다면 다른 결과가 나오는 게 정상입니다. 만약 NOT NULL인 컬럼이였다면 COUNT(*)과 동일한 결과 값(과정이 아닌 결과에 대해서만)이 나올 겁니다.
다만, COUNT(*)과 COUNT(컬럼)은 사용 목적을 달리하는 게 맞습니다. COUNT(*)의 경우 전체 행이 몇 개인지 세는 경우, COUNT(컬럼)은 해당 컬럼의 행이 몇 개인지 세는 경우로 구분하여 사용하는 게 옳은 사용법입니다.
아무리 해당 컬럼이 NOT NULL인 경우라 해도 본인을 제외 한 다른 사람이 해당 쿼리를 봤을 때 전체 행의 갯수를 세기 위해 만든 쿼리란 걸 모를 확률이 높습니다.(심지어 반년 뒤의 자신 또한 포함해서 말이죠)
출처 - https://ggmouse.tistory.com/156
'Develop > Database & SQL' 카테고리의 다른 글
[PL/SQL] 무작정 시작하기 (0) | 2022.12.01 |
---|---|
1시간후, 1시간전, 1분전, 30분후, 1초전 (0) | 2022.09.23 |
PL/SQL Developer 환경설정 파일백업/복구 (0) | 2021.04.06 |
해당 데이터에 중복값 카운트를 구하는 쿼리 (0) | 2021.03.29 |
PL/SQL Developer 환경설정 (0) | 2021.03.18 |