인프런 커뮤니티 질문&답변

seulki824님의 프로필 이미지
seulki824

작성한 질문수

데이터 분석 SQL Fundamentals

상관(Correlated) 서브 쿼리와 Exists 이해 - 02

상관서브쿼리와 Exists의 이해 -02의 left outer join관련

작성

·

331

·

수정됨

0

안녕하세요, 강사님

서브쿼리 강의 듣다 궁금한 사항이 있어 질문드립니다.

--------------------------------------------------------

문제:

1997년 이후에 단 한건도 주문하지 않은 고객정보를 조인으로 변환

select *

from nw.customers a

left join (select customer_id from nw.orders

where order_date >= to_date('19970101', 'yyyymmdd') group by customer_id) b

on a.customer_id = b.customer_id

where b.customer_id is null;

--------------------------------------------------------

여기서, b의 테이블이 1997년 이후로 구매한 사람들의 데이터만 담겨있을 것이고, a의 테이블이 전체 customer_id에 대해 담겨 있을 텐데,

따라서 a.customer_id is null로 작성하는게 아닌지요..? 너무 헷갈립니다 ㅜㅜ

답변 2

0

seulki824님의 프로필 이미지
seulki824
질문자

감사합니다-! 이해했습니다!! :)

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

a 테이블은 Left Join의 기준 테이블이니까 특정 customer_id가 b 집합에서 없어서 조인이 되지 않는 경우에도 조인 결과에서는 제외되지 않습니다. 다만 해당 customer_id의 경우는 b 집합과 조인되지 않으므로 b집합에서 데이터를 가져올 수는 없습니다.

때문에 a와 b 집합의 left join시 제외되는 특정 customer id를 추출하고자 한다면 b.customer_id가 null이 되는 집합만 찾으면 됩니다.

left join은 헷갈리기 쉽지만, 의미를 다시 생각해보고, 조금만 반복 실습하면 충분히 명확하게 이해하실 수 있을 것입니다.

감사합니다.

 

seulki824님의 프로필 이미지
seulki824

작성한 질문수

질문하기