다음 ㉠과 ㉡의 결과 값을 순서대로 나열한 것은?[회원]회원번호이름1서… | [SQLD] SQL 개발자 기출유형 모의고사 3회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 3회
다음 ㉠과 ㉡의 결과 값을 순서대로 나열한 것은?[회원]
| 회원번호 | 이름 |
|---|---|
| 1 | 서하 |
| 2 | 민재 |
| 3 | 유나 |
| 4 | 태윤 |
| 5 | 지오 |
[게시글]
| 글번호 | 작성자번호 | 제목 |
|---|---|---|
| 11 | 1 | 가입 인사 |
| 12 | 1 | 질문 |
| 13 | 3 | 후기 |
| 14 | (null) | 탈퇴회원 글 |
| 15 | 4 | 공지 문의 |
㉠
SELECT COUNT(*) FROM 회원 WHERE 회원번호 NOT IN (SELECT 작성자번호 FROM 게시글);
㉡
SELECT COUNT(*) FROM 회원 M
WHERE NOT EXISTS (SELECT 1 FROM 게시글 P
WHERE P.작성자번호 = M.회원번호);1
0, 2
2
2, 2
3
2, 0
4
1, 2
해설
㉠은 서브쿼리 결과에 NULL 이 섞여 NOT IN 비교가 어떤 회원에서도 참이 되지 못해 0이고, ㉡의 NOT EXISTS 는 NULL 과 무관하게 글이 없는 민재·지오를 세어 2이다.
x NOT IN (1, 3, NULL, 4)는 x <> NULL 비교가 UNKNOWN 이므로 결과가 참이 될 수 없다.
- ㉠을 2로 본 것은 NULL 행을 무시한다고 착각한 경우이다.
- ㉡을 0으로 본 것은 NOT EXISTS 도 NULL 에 영향받는다고 본 경우이다.
- ㉠을 1로 볼 근거는 없으며, NULL 하나가 전체 비교를 막는다.
오류나 개정된 내용이 보이면 알려주세요