문제
다음 상관 서브쿼리의 실행 결과로 가장 적절한 것은?
SQLSELECT s.student_id, s.student_name FROM students s WHERE NOT EXISTS ( SELECT 1 FROM enrollments e WHERE e.student_id = s.student_id AND e.course_code IN ('CS101', 'CS102') AND e.grade IN ('A', 'B') );
이 쿼리가 반환하는 학생은?
① CS101과 CS102 모두에서 A 또는 B 성적을 받은 학생 ② CS101 또는 CS102 중 적어도 하나에서 A 또는 B 성적을 받지 않은 학생 ③ CS101과 CS102 중 어느 과목에서도 A 또는 B 성적을 받지 않은 학생 ④ CS101과 CS102를 수강하지 않았거나, 수강했더라도 A 또는 B 성적을 받지 않은 학생
정답
4번
해설
NOT EXISTS는 서브쿼리가 결과를 반환하지 않는 경우에만 TRUE가 됩니다. 서브쿼리는 해당 학생이 CS101 또는 CS102에서 A 또는 B 성적을 받은 기록이 있는지 찾습니다. 따라서 이 조건을 만족하는 기록이 없는 학생, 즉 두 과목을 아예 수강하지 않았거나 수강했더라도 A, B 성적을 받지 않은 학생이 반환됩니다.