더북(TheBook)

그럼 예제로 RIGHT 조인을 확인해 봅시다.

코드 8-13

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

실행결과

코드 8-13은 코드 8-12에서 조인 구문을 LEFT에서 RIGHT로만 변경했습니다. 결과를 보면 총 6건이 조회됐고 남극 대륙 건이 누락됐네요. 이번에는 이유가 뭘까요?

RIGHT 조인은 조인 구문 기준으로 오른쪽인 city 테이블에서 조인 조건을 만족하지 않는 건까지 추가로 조회합니다. 하지만 city 테이블에는 country 테이블에 없는 국가의 도시 데이터는 존재하지 않습니다. 즉, city 테이블의 countrycode에 있는 모든 값은 country 테이블의 code 값에 있습니다. 구문상으로는 조인 조건을 만족하지 않는 건까지 조회해 오는 게 맞지만, 테이블에 조건을 만족하지 않는 데이터가 아예 없어서 결과적으로 조인 조건을 만족하는 건만 조회됩니다. 사실 city 테이블의 countrycode 칼럼에는 country 테이블의 code 값을 참조하는 외래 키가 있어서 city 테이블에 데이터를 넣을 때 country 테이블에 없는 국가 코드 값을 넣을 수 없습니다.

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