문제
사원관리 데이터베이스에는 [부서정보] 테이블과 실적 정보를 포함한 [사원정보] 테이블이 관계로 연결되어 있다. 다음 중 아래의 SQL문의 실행 결과에 대한 설명으로 옳은 것은? (단, 부서에는 여러 사원이 있으며, 한 사원은 하나의 부서에 소속되는 1 대 다 관계임)
① 두 테이블에서 부서번호가 일치되는 레코드의 부서번호, 부서명, 번호, 이름, 실적 필드를 표시한다. ② [부서정보] 테이블의 레코드는 모두 포함하고, [사원정보] 테이블에서는 실적이 있는 레코드만 포함하여 결과를 표시한다. ③ [부서정보] 테이블의 레코드는 [사원정보] 테이블의 부서번호와 일치되는 것만 포함하고, [사원정보] 테이블에서는 실적이 있는 레코드만 포함하여 결과를 표시한다. ④ [부서정보] 테이블의 레코드는 [사원정보] 테이블의 부서번호와 일치되는 것만 포함하고, [사원정보] 테이블에서는 모든 레코드가 포함하여 결과를 표시한다.
정답
4번
해설
정답: 4. RIGHT JOIN은 오른쪽 테이블([사원정보])의 모든 레코드를 포함하고, 왼쪽 테이블([부서정보])에서는 조인 조건(부서번호 일치)에 맞는 레코드만 결합한다. 따라서 사원정보는 전부, 부서정보는 일치하는 것만 표시된다.
오답 풀이
- 1번: 양쪽 모두 일치하는 것만 표시하는 것은 INNER JOIN이므로 틀리다.
- 2번: 부서정보를 모두 포함하는 것은 LEFT JOIN의 결과이고, '실적이 있는' 조건은 없으므로 틀리다.
- 3번: 사원정보에서 실적이 있는 레코드만 포함한다는 조건은 SQL에 없으므로 틀리다.
- 4번: 오른쪽(사원정보)은 전부, 왼쪽(부서정보)은 일치하는 것만 포함하므로 옳다.
보충 개념 JOIN 종류: INNER JOIN(양쪽 일치만), LEFT JOIN(왼쪽 전부 + 오른쪽 일치), RIGHT JOIN(오른쪽 전부 + 왼쪽 일치). 일치하지 않는 쪽 필드는 NULL로 채워진다.