다음 두 SQL 의 결과 행 수를 (㉠, ㉡) 순서로 바르게 나열한 것… | [SQLD] SQL 개발자 기출유형 모의고사 2회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 2회
다음 두 SQL 의 결과 행 수를 (㉠, ㉡) 순서로 바르게 나열한 것은?[직원]
| 직원번호 | 이름 | 지점코드 |
|---|---|---|
| 101 | 김하늘 | S1 |
| 102 | 이도윤 | S1 |
| 103 | 박서연 | S2 |
| 104 | 최민준 | S2 |
| 105 | 정예린 | S3 |
[지점]
| 지점코드 | 지점명 | 관리자번호 |
|---|---|---|
| S1 | 강남 | 101 |
| S2 | 판교 | 103 |
| S3 | 분당 | (null) |
㉠ SELECT 이름 FROM 직원
WHERE 직원번호 NOT IN (SELECT 관리자번호 FROM 지점);
㉡ SELECT 이름 FROM 직원 E
WHERE NOT EXISTS (SELECT 1 FROM 지점 J
WHERE J.관리자번호 = E.직원번호);1
3, 3
2
3, 0
3
0, 3
4
0, 0
해설
㉠은 목록에 NULL이 섞여
직원번호 <> NULL이 UNKNOWN이 되므로 어떤 행도 참이 되지 않아 0행이다.㉡의 NOT EXISTS는 짝이 되는 행의 존재만 따지고 NULL 관리자번호는 어느 직원과도 같지 않아 102·104·105번 3행이 나온다.
- 둘 다 3행이라 보면 NOT IN의 NULL 비교를 놓친 것이다.
- ㉠ 3행·㉡ 0행은 두 연산의 NULL 처리를 뒤바꾼 것이다.
- 둘 다 0행이라 보면 NOT EXISTS도 NULL에 막힌다고 오해한 것이다.
오류나 개정된 내용이 보이면 알려주세요