다음 두 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에 막힌다고 오해한 것이다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[SQLD] SQL 개발자 기출유형 모의고사 2회 50문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요SQLD SQL 개발자 실전 모의고사 암기장 전체 보기