-
카테고리
-
세부 분야
데이터베이스
-
해결 여부
미해결
상관서브쿼리와 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로 작성하는게 아닌지요..? 너무 헷갈립니다 ㅜㅜ
답변을 작성해보세요.
0
0
권 철민
지식공유자2022.12.06
안녕하십니까,
a 테이블은 Left Join의 기준 테이블이니까 특정 customer_id가 b 집합에서 없어서 조인이 되지 않는 경우에도 조인 결과에서는 제외되지 않습니다. 다만 해당 customer_id의 경우는 b 집합과 조인되지 않으므로 b집합에서 데이터를 가져올 수는 없습니다.
때문에 a와 b 집합의 left join시 제외되는 특정 customer id를 추출하고자 한다면 b.customer_id가 null이 되는 집합만 찾으면 됩니다.
left join은 헷갈리기 쉽지만, 의미를 다시 생각해보고, 조금만 반복 실습하면 충분히 명확하게 이해하실 수 있을 것입니다.
감사합니다.
답변 2