모두CBT

다음 중 아래와 같은 테이블 구조를 가진 데이터베이스에서 부서명이 ‘인… | [컴퓨터활용능력 1급 필기] 15년 1회차 기출문제 상세 페이지

1[컴퓨터활용능력 1급 필기] 15년 1회차
다음 중 아래와 같은 테이블 구조를 가진 데이터베이스에서 부서명이 ‘인사부’인 직원들의 정보를 조회하는 SQL문으로 가장 적절한 것은?
부서(부서번호, 부서명)
직원(사번, 사원명, 부서번호)
1
SELECT * FROM 부서 WHERE 부서번호 IN (SELECT 부서번호 FROM 직원)
2
SELECT * FROM 직원 WHERE 부서번호 IN (SELECT 부서번호 FROM 부서 WHERE 부서명='인사부')
3
SELECT 직원.* FROM 직원, 부서 WHERE 부서.부서명 = '인사부'
4
SELECT * FROM 부서 WHERE 부서명='인사부' ORDER BY 부서번호
해설

주어진 구조에서 부서 테이블은 기본키인 부서번호와 부서명을 갖고, 직원 테이블은 기본키인 사번과 사원명, 그리고 부서를 가리키는 외래키 부서번호를 갖는다. 즉 '인사부'라는 이름은 부서 테이블에만 있고, 조회해야 할 직원 정보는 직원 테이블에만 있으므로 두 테이블을 부서번호로 연결해야 한다.

이를 하위 쿼리로 푸는 방식이 SELECT * FROM 직원 WHERE 부서번호 IN (SELECT 부서번호 FROM 부서 WHERE 부서명='인사부') 이다. 안쪽 쿼리가 부서명이 '인사부'인 부서번호를 먼저 구하고, 바깥 쿼리가 그 부서번호를 가진 직원 레코드만 골라 낸다. 결과로 나오는 것은 직원 테이블의 행이므로 문제에서 요구한 '직원들의 정보'와 정확히 일치한다.

나머지 방식들은 목적에 맞지 않는다. 부서 테이블을 FROM 에 두면 조회 결과가 직원이 아니라 부서 정보가 되고, 조건 없이 부서번호를 IN 으로 비교하는 문장은 인사부라는 조건 자체가 빠져 있다. 또 두 테이블을 FROM 에 나열하면서 부서번호를 맞추는 조인 조건 없이 부서명 조건만 주면 두 테이블의 모든 행이 짝지어지는 카티션 곱이 되어 인사부가 아닌 직원까지 중복 출력된다.

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