더북(TheBook)

여기서 의문점 하나! 도시 수를 의미하는 COUNT() 함수가 반환하는 숫자가 남극을 보면 5입니다. 분명히 앞에서 남극에 속한 국가에 해당하는 데이터가 city 테이블에 존재하지 않는 것을 확인했는데 말이죠.

사실 COUNT의 매개변수로 *를 넘겼기 때문에 결과로 반환하는 숫자는 조회된 로우 수입니다. 남극을 제외한 다른 대륙은 모두 city 테이블에 데이터가 있으므로 실질적으로 COUNT(*)가 반환하는 숫자는 도시 수로 보는 것이 맞습니다. 하지만 LEFT 조인으로 country 테이블에 있는 남극 데이터가 조회됐습니다. 즉, 조회된 5는 country 테이블에 담긴 남극 대륙에 속한 국가 건수를 의미합니다. 만약 정확한 도시 수를 구하고 싶다면 다음과 같이 쿼리를 작성하면 됩니다.

코드 8-12

SELECT a.continent, COUNT(*) 전체건수, COUNT(b.name) 도시건수
  FROM country a
  LEFT OUTER JOIN city b
    ON a.code = b.countrycode
 GROUP BY a.continent;

실행결과

코드 8-12에서는 COUNT(*)는 전체 건수를, COUNT(b.name)는 도시 건수를 반환합니다. COUNT() 함수의 매개변수로 city 테이블의 도시명 칼럼(name)을 넘기니 남극 대륙은 0을 반환했습니다. 남극 대륙에 속한 도시가 없음을 확실하게 확인할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.