문제
다음 SQL에서 오류가 발생하는 원인으로 가장 적절한 것은?
SQLSELECT ID, SUM(SAL) FROM EMP WHERE ID = (SELECT ID FROM A WHERE 조건 = 'Y') GROUP BY ID HAVING SUM(SAL) > 5000;
<조건>
서브쿼리 (SELECT ID FROM A WHERE 조건 = 'Y')는 여러 행을 반환할 수 있다.
① SELECT 절에서 SUM(SAL)을 사용했기 때문이다. ② = 연산자에 사용된 서브쿼리가 여러 행을 반환할 수 있기 때문이다. ③ GROUP BY ID를 사용했기 때문이다. ④ HAVING SUM(SAL) > 5000을 사용했기 때문이다.
정답
2번
해설
정답: 2. = 연산자는 단일 값을 기대하므로 서브쿼리가 여러 행을 반환하면 단일 행 서브쿼리 오류가 발생할 수 있다.
오답 풀이
- 1번: GROUP BY ID와 함께 SUM(SAL)을 사용하는 것은 가능하다.
- 2번: 다중 행 서브쿼리를 =로 비교하는 것이 오류 원인이다.
- 3번: GROUP BY ID 자체는 오류가 아니다.
- 4번: HAVING 절에서 집계 함수 조건을 사용하는 것은 가능하다.
보충 개념 서브쿼리 결과가 여러 행이면 = 대신 IN, ANY, ALL 등을 사용해야 한다. WHERE 절에는 집계 함수를 직접 사용할 수 없다는 별도 유형도 자주 출제된다.