SQL 개발자 자격증SQL 활용안티조인과 NULL 처리난이도 2MCQ

SQL 개발자 자격증 안티조인과 NULL 처리 기출문제 #21869

문제

부서 테이블에 존재하지 않는 부서번호를 가지거나 부서번호가 NULL인, 즉 '어느 부서에도 속하지 않는' 사원을 모두 조회하려 한다. 가장 적절한 SQL은?

① SELECT * FROM 사원 WHERE 부서번호 = NULL ② SELECT s.* FROM 사원 s INNER JOIN 부서 d ON s.부서번호 = d.부서번호 WHERE d.부서번호 IS NULL ③ SELECT * FROM 사원 WHERE 부서번호 IN (SELECT 부서번호 FROM 부서) ④ SELECT s.* FROM 사원 s LEFT OUTER JOIN 부서 d ON s.부서번호 = d.부서번호 WHERE d.부서번호 IS NULL

정답

4

해설

정답은 ④이다. LEFT OUTER JOIN으로 모든 사원을 보존한 뒤, 조인에 실패해 부서 쪽 컬럼이 NULL로 채워진(=매칭되는 부서가 없는) 행만 d.부서번호 IS NULL로 걸러낸다. 이 방식은 '부서번호가 부서 테이블에 없는 고아 값'과 '부서번호 자체가 NULL인 사원'을 모두 포착한다. ① = NULL은 항상 UNKNOWN이라 결과가 비어 잘못된 표현이다(반드시 IS NULL 사용). ② INNER JOIN은 매칭된 행만 남기므로 d.부서번호가 NULL일 수 없어 항상 공집합이다. ③은 오히려 '부서에 속하는' 사원을 반환하며(반대 결과), 게다가 부서번호가 NULL인 사원은 IN 비교에서 제외된다. 보충: 안티조인은 OUTER JOIN + IS NULL 또는 NOT EXISTS로 구현하며, NOT IN은 서브쿼리 결과에 NULL이 섞이면 전체가 UNKNOWN이 되어 위험하다.

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

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

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

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

[SQL 개발자 자격증] 안티조인과 NULL 처리 SQL 활용 기출 #21869 | 문어CBT