조회하려는 주요 정보는 city 테이블에 있으므로 메인쿼리에서 city 테이블을 조회합니다. 그런데 이 중에서 국가명은 city 테이블에 없습니다. 국가명은 country 테이블에 있으니 서브쿼리에서 country 테이블을 조회해 국가명을 가져온 것이죠. 또한, 해당 도시가 속한 국가명을 가져오려고 서브쿼리에서 메인쿼리에 있는 city 테이블과 조인한 것입니다. 그리고 서브쿼리가 끝날 때(닫는 괄호 다음에) countryname이라는 별칭을 둬서 서브쿼리가 반환하는 국가명이 countryname으로 조회됩니다.
이처럼 어떤 코드 값에 대한 명칭을 조회할 때 스칼라 서브쿼리를 많이 사용합니다. 여기서는 국가 코드에 해당하는 국가명을 조회하려고 스칼라 서브쿼리를 사용했습니다. 물론 서브쿼리 대신 조인을 사용해도 같은 결과를 얻을 수 있습니다. 또한, 서브쿼리의 WHERE 절에 메인쿼리와 국가 코드 값이 같은 건을 확인하는 조인 조건이 있어서 이 쿼리는 스칼라 서브쿼리이면서 연관성 있는 서브쿼리에 속합니다.
또 다른 쿼리를 살펴볼까요?
코드 9-5
SELECT a.name, a.district, a.population, a.countrycode,
(SELECT b.name, b.continent
FROM country b
WHERE a.countrycode = b.code
) countryname
FROM city a;
실행결과