다음과 같은 테이블들이 주어졌을 때,
프로그래밍언어
| 일련번호(int) | 명칭(varchar) | 비고(varchar) |
|---|---|---|
| 1 | java | 검토 중 |
| 2 | javascript | NULL |
| 3 | c# | 검토 완료 |
| 4 | python | 검토 전 |
시험신청현황
| 학생ID(int) | 이름(varchar) | 신청과목일련번호(int) |
|---|---|---|
| 1001 | 김개똥 | 1 |
| 1002 | 홍길동 | 3 |
| 1003 | 아무개 | 4 |
SELECT COUNT( TST.학생ID )
FROM 프로그래밍언어 AS PGM
LEFT JOIN 시험신청현황 AS TST ON ( PGM.일련번호 = TST.신청과목일련번호 )
;
-- 결과 : 3
-- 집계함수는 NULL에 대해서는 SKIP을 한다.
-- JOIN이 완료된 중간 결과테이블의 전체 행 수는 4행이지만,
-- 'TST.학생ID' 컬럼에 NULL 1건이 포함되어 있다.
SELECT COUNT( 1 )
FROM 프로그래밍언어 AS PGM
LEFT JOIN 시험신청현황 AS TST ON ( PGM.일련번호 = TST.신청과목일련번호 )
;
-- 결과 : 4
-- JOIN이 완료된 중간 결과테이블의 전체 행 수가 4행이라서
-- 무조건 행 수를 센다.
-- 주의사항 : 일반적으로 OUTER JOIN문에서의 COUNT(1) 형식의 집계함수 사용은 굉장히 위험한 집계방법이며 논리 오류나 혼란을 일으킬 수 있으므로 주의해야 한다.
Written with StackEdit.