not In강의 / leetcode 1978 질문 드립니다
leetcode 1978번 문제에서 왜 서브 쿼리를 지정해야만 정답이 나올 수 있는지 궁금합니다. 예를 들어,
select employee_id
from employees
where salary < 30000
and manager_id not in(employee_id);서브쿼리를 지정하지 않고 위와 같이 작성한 경우에는
| employee_id |
| ----------- |
| 1 |
| 11 |위와 같이 출력 되는데 왜 서브 쿼리를 지정 안 할 경우에는 해당 출력이 나오는지 궁금합니다
回答 1
2
승렬님 안녕하세요:)
leetcode 문제: https://leetcode.com/problems/employees-whose-manager-left-the-company/description/
먼저, 이해하기 쉽게 Employees 테이블을 전체 조회하면 아래처럼 나옵니다.

그 다음에 서브쿼리를 쓰지 않고 바로 not in으로 비교하면, row별 manager_id와 employee_id를 비교하게 됩니다.

이건 마치 manager_id와 employee_id가 서로 다른 row를 조회하는 셈이 되는데요.
전체 Employees 테이블 조회했을 때 나왔던 manager_id=null이 여기서 나오지 않은 이유는,
null은 특정 값과 비교자체가 안되기 때문입니다. (숫자 '0'이 '4'와 다르다라고 말할 수는 있어도, '없다'(=null)과 '4'와 같다, 다르다라고 비교 자체가 성립되지 않습니다)

하지만 이렇게 서브쿼리를 쓴다면,
이제 더이상 row별로 manager_id와 employee_id가 다른지 비교하는게 아니라, manager_id가 (3, 12, 13, 1, 9, 11)이 아니기만 하면 된다라는 조건으로 바뀝니다. 그리고 이게 실제 문제를 풀려고 우리가 의도했던 로직이 됩니다.
select employee_id
from Employees
where salary < 30000
and manager_id not in
(
select employee_id
from Employees
)
order by employee_id;
읽으시고 추가 궁금한 부분 있으시면, 언제든지 질문 주세요:)
패키지 구분에 대해 궁금한게 있습니다
0
8
1
노션 링크도 안 열리고, 알려준 vercel도 실행이 안됩니다.
0
10
1
스프링부트 서버 에러나요
0
17
1
코드를 첨부해야하는 이유가 있나요?
0
20
2
간단한 오타 제보입니다.
0
19
1
큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.
0
35
2
실제 FK제약조건을 설정하지 않는이유
0
35
2
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
28
2
Free Edition 실습 영상은 아직 업데이트전인가요?
0
22
1
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
36
2
문제 링크 변경
0
55
2
SQL 파일 다운로드
0
62
2
workbench 테이블 생성
0
274
2
sql 코딩 테스트에서 index 생성 가능 여부
1
282
2
cross join, full join강의 / leetcode 1280번 문제 질문드립니다
1
300
1
LEETCODE - Sales Analysis 3 코드 질문드립니다.
1
279
1
[The Latest Login in 2020] datetime 계산 관련
1
249
1
[Average Selling Price] 문제 테스트케이스 실패
1
281
3
서브쿼리 질문
1
349
1
EASY INNER JOIN 관련 average-selling-price 연습문제
1
282
1
INNER JOIN 강의 질문
1
326
2
문제 주소 링크
1
297
2
work bench 설치관련 문의
1
280
2
깃헙 데스크탑, MYSQL 워크벤치 연동
2
859
3

