작성
·
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
0
안녕하십니까,
a 테이블은 Left Join의 기준 테이블이니까 특정 customer_id가 b 집합에서 없어서 조인이 되지 않는 경우에도 조인 결과에서는 제외되지 않습니다. 다만 해당 customer_id의 경우는 b 집합과 조인되지 않으므로 b집합에서 데이터를 가져올 수는 없습니다.
때문에 a와 b 집합의 left join시 제외되는 특정 customer id를 추출하고자 한다면 b.customer_id가 null이 되는 집합만 찾으면 됩니다.
left join은 헷갈리기 쉽지만, 의미를 다시 생각해보고, 조금만 반복 실습하면 충분히 명확하게 이해하실 수 있을 것입니다.
감사합니다.