문제
아래 UPDATE 구문에 대한 설명으로 알맞은 것은?
SQLUPDATE emp_test A SET salary = ( SELECT salary * 1.1 FROM emp_test B WHERE A.employee_id = B.employee_id AND B.department_id = 60 );
<조건> UPDATE 문에는 별도의 WHERE 절이 없다.
① DEPTNO가 10인 사원들의 월급을 10% 인상하는 쿼리이다. ② UPDATE ... WHERE DEPTNO = 10과 동일한 의미이다. ③ 오류가 발생한다. ④ department_id가 60이 아닌 모든 사원들의 salary가 NULL로 수정된다.
정답
4번
해설
정답: 4. UPDATE 문 자체에 WHERE 절이 없으므로 모든 행이 갱신 대상이며, 상관 서브쿼리가 department_id=60 조건을 만족하지 않는 행은 NULL을 반환하여 salary가 NULL로 갱신될 수 있다.
오답 풀이
- 1번: department_id=60 조건이며, 전체 UPDATE 대상 제한 조건이 아니다.
- 2번: UPDATE 문에 WHERE가 없으므로 department_id=60 행만 갱신하는 것과 다르다.
- 3번: 스칼라 서브쿼리 결과가 없으면 NULL로 처리될 수 있어 문법 오류는 아니다.
- 4번: 조건에 맞지 않는 행의 salary가 NULL로 바뀔 수 있다.
보충 개념 UPDATE의 SET 절에 서브쿼리를 사용할 때는 UPDATE 대상 행을 제한하는 WHERE 절을 별도로 작성해야 한다. 그렇지 않으면 의도하지 않은 행까지 갱신될 수 있다.