모두CBT

다음의 관계를 참고하여 부서이름이 '영업부'인 사원들의 성명과 근무년수… | [컴퓨터활용능력 1급 필기] 10년 3회차 기출문제 상세 페이지

1[컴퓨터활용능력 1급 필기] 10년 3회차
다음의 관계를 참고하여 부서이름이 '영업부'인 사원들의 성명과 근무년수를 검색하는 SQL 구문으로 가장 적절한 것은?
문제 이미지
1
SELECT 성명, 근무년수 FROM 사원 left join 부서 WHERE 사원.부서코드 = 부서.부서코드 and 부서이름 ='영업부');
2
SELECT 성명, 근무년수 FROM 사원 WHERE 부서코드 IN (SELECT 부서코드 FROM 부서 WHERE 부서이름 ='영업부');
3
SELECT A.성명, B.근무년수 FROM 사원 AS A, 부서 AS B WHERE B.부서이름 = '영업부';
4
SELECT 성명, 근무년수 FROM 사원, 부서 WHERE 부서코드 in (SELECT 부서코드 FROM 부서 WHERE 부서이름 = '영업부');
해설

관계 창을 보면 부서 테이블(부서코드·부서이름·부서장)과 사원 테이블(사번·성명·성별·부서코드·근무년수)이 공통 필드인 부서코드로 일대다(1:∞) 관계를 맺고 있다. 즉 검색 조건인 부서이름은 부서 테이블에만 있고, 출력할 성명과 근무년수는 사원 테이블에만 있다.

그러므로 부서이름이 '영업부'인 부서의 부서코드를 부서 테이블에서 먼저 구한 뒤, 그 코드를 가진 사원만 골라 성명과 근무년수를 표시하면 된다. 이를 하위 질의로 표현한 SELECT 성명, 근무년수 FROM 사원 WHERE 부서코드 IN (SELECT 부서코드 FROM 부서 WHERE 부서이름 = '영업부'); 가 가장 적절하다.

FROM에 두 테이블을 나열하면서 부서코드끼리 연결하는 조인 조건을 넣지 않으면 모든 행이 짝지어지는 카티션 곱이 생겨 엉뚱한 결과가 대량으로 나오고, 사원 테이블에 있는 근무년수를 부서 테이블 별칭으로 참조하거나 left join에 ON 없이 WHERE만 쓰고 괄호까지 어긋난 구문은 아예 실행되지 않는다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.