문제
주어진 쿼리문과 결과가 동일한 것은?
SQLUPDATE TAB1 T1 SET COL1 = (SELECT MAX(NULL) FROM TAB2 T2 WHERE T1.COL1 = T2.COL2 AND T1.COL1 >= 200);
① UPDATE TAB1 SET COL1 = (SELECT MAX(COL2) FROM TAB2 T2 WHERE T1.COL1 = T2.COL2 AND T1.COL1 >= 200); ② UPDATE TAB1 SET COL1 = (SELECT COALESCE(MAX(NULL), 0) FROM TAB2 T2 WHERE T1.COL1 = T2.COL2); ③ UPDATE TAB1 SET COL1 = (SELECT MAX(0) FROM TAB2 T2 WHERE T1.COL1 = T2.COL2 AND T1.COL1 >= 200); ④ UPDATE TAB1 SET COL1 = NULL;
정답
4번
해설
정답: 4. MAX(NULL)은 결과적으로 NULL을 반환하므로 각 행의 COL1은 NULL로 갱신된다.
오답 풀이
- 1번: MAX(COL2)는 실제 값의 최댓값을 반환할 수 있어 원문과 다르다.
- 2번: COALESCE로 NULL을 0으로 바꾸므로 원문과 다르다.
- 3번: MAX(0)은 조건에 맞는 행이 있으면 0을 반환하므로 원문과 다르다.
- 4번: 원문은 결과적으로 COL1을 NULL로 갱신하므로 동일하다.
보충 개념 집계 함수 MAX는 모든 입력이 NULL이면 NULL을 반환한다. 스칼라 서브쿼리 결과가 NULL이면 UPDATE 대상 컬럼도 NULL로 설정될 수 있다.