SQL 개발자 자격증SQL 활용EXISTS·집합연산 서브쿼리난이도 2MCQ

SQL 개발자 자격증 EXISTS·집합연산 서브쿼리 기출문제 #21889

문제

학생(학번, 이름)과 수강(학번, 과목) 테이블이 있다. '강의를 수강하는(수강 기록이 있는) 학생'을 조회하려고 할 때, 그 방법으로 적절하지 않은 것은?

① SELECT * FROM 학생 s WHERE EXISTS (SELECT 1 FROM 수강 c WHERE c.학번 = s.학번) ② SELECT * FROM 학생 s WHERE s.학번 IN (SELECT 학번 FROM 수강) ③ SELECT 학번 FROM 학생 INTERSECT SELECT 학번 FROM 수강 ④ SELECT * FROM 학생 s WHERE NOT EXISTS (SELECT 1 FROM 수강 c WHERE c.학번 = s.학번)

정답

4

해설

정답은 ④이다(적절하지 않은 것).

④ NOT EXISTS는 수강 테이블에 해당 학번이 '존재하지 않는' 학생, 즉 강의를 하나도 수강하지 않는 학생을 조회한다. 문제 의도(수강하는 학생)와 정반대이므로 적절하지 않다.

오답 풀이(모두 적절한 방법) ① EXISTS는 수강 테이블에 같은 학번 행이 존재하는 학생만 남기므로 수강생을 정확히 조회한다. ② IN 서브쿼리는 수강 테이블에 나타난 학번 집합에 포함되는 학생을 반환하므로 EXISTS와 사실상 동일한 결과다. ③ INTERSECT는 학생의 학번과 수강의 학번의 교집합, 즉 양쪽 모두에 존재하는 학번(=수강한 학생)을 반환한다.

보충: '존재하면' EXISTS/IN/INTERSECT, '존재하지 않으면' NOT EXISTS/NOT IN/MINUS(EXCEPT)로 매핑해 기억하면 유형을 빠르게 구분할 수 있다.

SQL 개발자 자격증 SQL 활용 다른 기출문제

SQL 개발자 자격증 시험 준비 가이드

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.