문제
다음과 같은 <사원> 테이블과 <프로젝트> 테이블을 대상으로, "신제품" 프로젝트에 참여한 사원의 "사원명"을 출력하는 SQL문으로 옳은 것은?
<사원>
| 사번 | 사원명 |
|---|---|
| 101 | 김철수 |
| 102 | 이영희 |
| 103 | 박민수 |
<프로젝트>
| 프로젝트명 | 사번 |
|---|---|
| 신제품 | 101 |
| 신제품 | 102 |
| 유지보수 | 103 |
① SELECT 사원명 FROM 사원, 프로젝트 WHERE 사번 = (SELECT 사번 FROM 프로젝트 WHERE 프로젝트명 = '신제품'); ② SELECT 사원명 FROM 사원 WHERE 사번 IN (SELECT 사번 FROM 프로젝트 WHERE 프로젝트명 = '신제품'); ③ SELECT 사원명 FROM 프로젝트 WHERE 사번 IN (SELECT 사번 FROM 사원 WHERE 프로젝트명 = '신제품'); ④ SELECT 사원명 FROM 사원 WHERE 프로젝트명 = '신제품';
정답
2번
해설
정답: 2. "신제품" 프로젝트의 사번이 둘 이상(101, 102)이므로, 하위 질의가 여러 값을 반환할 수 있는 IN 연산자를 사용해 그 사번에 해당하는 사원명을 조회한다.
오답 풀이
- 1번: 하위 질의가 여러 행을 반환할 수 있는데 "="를 사용해 오류가 나므로 옳지 않다.
- 2번: IN으로 여러 사번을 받아 사원명을 조회하므로 옳다.
- 3번: 사원 테이블에는 프로젝트명 필드가 없으므로 옳지 않다.
- 4번: 사원 테이블에 프로젝트명 필드가 없어 조건이 성립하지 않으므로 옳지 않다.
보충 개념 하위 질의가 단일 값을 반환하면 "="를, 여러 값을 반환할 수 있으면 IN을 사용한다.