DEVELOPER(developer_id), REQUIRED_COURSE(course_id), COMPLETION(developer_id, course_id)가 있다. 필수 과정 전체를 이수한 개발자의 developer_id를 조회하는 SQL을 작성하시오.필수 과정이 하나도 없을 때는 모든 개발자가 결과에 포함되어야 한다.
DEVELOPER(developer_id)
REQUIRED_COURSE(course_id)
COMPLETION(developer_id, course_id)모범답안
SELECT d.developer_id FROM DEVELOPER d WHERE NOT EXISTS ( SELECT 1 FROM REQUIRED_COURSE r WHERE NOT EXISTS ( SELECT 1 FROM COMPLETION c WHERE c.developer_id = d.developer_id AND c.course_id = r.course_id ) );
풀이와 판단 근거
안쪽 NOT EXISTS는 특정 개발자가 특정 필수 과정을 이수한 행이 없는지를 검사한다. 바깥 NOT EXISTS는 그런 미이수 필수 과정이 하나도 없는 개발자만 남긴다.
필수 과정 테이블이 비어 있으면 바깥 부질의에 행이 생기지 않아 모든 개발자가 참이 되므로 문제의 공집합 조건도 자연스럽게 만족한다.
자주 틀리는 지점
- 한 개 이상 이수한 개발자를 EXISTS로 조회
- 이수 개수만 비교하면서 중복 COMPLETION 행을 고려하지 않음
- 필수 과정이 0개일 때 아무도 반환하지 않는 INNER JOIN 사용
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.