문제
EXISTS 연산자에 대한 설명으로 가장 적절한 것은?
① 서브쿼리의 결과가 1건이라도 존재하면 TRUE를 반환하고 더 이상 검색하지 않는다. ② 메인쿼리의 컬럼 값을 서브쿼리로 전달할 수 없다. ③ 결과 집합에 NULL 값이 포함된 경우 무조건 에러를 발생시킨다. ④ 성능상 항상 IN 연산자보다 불리하게 작동한다.
정답
1번
해설
정답: 1. EXISTS 는 서브쿼리가 행을 한 건이라도 찾는 순간 TRUE 로 확정하고 나머지 탐색을 멈춘다(존재 여부만 판단).
오답 풀이
- ①: 정답. 첫 매칭 행 발견 시 즉시 참으로 판정한다.
- ②: EXISTS 는 보통 상관 서브쿼리로, 메인쿼리 컬럼 값을 서브쿼리로 전달해 사용한다.
- ③: EXISTS 는 행의 '존재 여부'만 보므로 결과에 NULL 이 있어도 에러가 나지 않는다.
- ④: 성능은 데이터 분포·인덱스에 따라 다르며, 항상 IN 보다 불리한 것은 아니다.
보충 개념
EXISTS 는 SELECT 절 내용과 무관하게 '행이 있는가'만 평가하므로 SELECT 1 을 흔히 쓴다. IN 은 서브쿼리 결과 값 집합과의 일치를 보고 NULL 처리에 주의가 필요한 반면, EXISTS 는 존재성만 따져 NULL 의 영향을 덜 받는다.