• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

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

22.12.06 11:58 작성 22.12.06 12:01 수정 조회수 225

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

질문자

2022.12.15

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

0

안녕하십니까,

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

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

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

감사합니다.