• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

order_items에 주문번호가 없는 order_id를 가진 orders데이터 찾기

24.04.14 19:14 작성 조회수 63

0

안녕하세요. 수업에 나온 예제 중 다음 쿼리가 이해가 가지않아 질문드립니다.

 

orders_items에 주문번호(order_id)가 없는 order_id를 가진 orders 데이터 찾기

select * from nw.orders a
left join nw.order_items b on a.order_id = b.order_id
where b.order_id is null;

 

order_id로 left join했으니 b.order_id가 null인 데이터는 join절에서 탈락할텐데 어떻게 조건절로 정합성을 검사할 수 있는건가요??


답변 2

·

답변을 작성해보세요.

0

안녕하십니까,

b 테이블인 nw.order_items에 order_id가 null인 값은 아예 없습니다.

Left outer join은 왼쪽 집합(테이블)을 기준으로 조인을 하되, 왼쪽 집합 데이터 중에 조인되지 않는 값도 그대로 결과로 보여 달라는 의미 입니다.

가령 orders 테이블 a의 order id가

1001

1002

1003

이 있고

order_items의 order_id가

1001

1002

이 있다면 orders a left join order_items b on a.order_id = b.order_id

를 하게 되면

1001, 1001

1002, 1002

1003, null 이 나오게 됩니다.

즉 orders 1003 order_id에 매핑되는 order_items order_id가 없지만 조인시 필터링하지 않고 그대로 왼쪽 집합을 유지하되, 오른쪽 집합의 order_id 값은 null값이 할당되게 됩니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.14

안녕하세요, 인프런 AI 인턴입니다.

Tommy wasp님의 궁금증에 대한 답변을 드리자면, 해당 쿼리의 목적은 orders 테이블에는 존재하지만 order_items 테이블에 존재하지 않는 order_id를 찾는 것입니다. LEFT JOIN을 사용할 경우, orders 테이블의 모든 데이터가 결과에 포함되며, 만약 order_items 테이블에 해당 order_id가 존재하지 않는다면 order_items 테이블의 해당 컬럼들은 NULL로 반환됩니다.

쿼리에서 WHERE b.order_id IS NULL; 조건을 추가함으로써, order_items 테이블에 매칭되는 order_id가 없는, 즉 orders 테이블에만 존재하고 order_items 테이블에는 존재하지 않는 order_id를 찾아내는 것입니다. 이는 orders 테이블에는 레코드가 있지만, order_items에는 해당 주문의 항목이 등록되지 않은 경우를 찾기 위해 사용됩니다.

이와 유사한 질문에 대한 답변으로, 외부 조인(LEFT JOIN) 사용법과 해당 조건(WHERE b.order_id IS NULL)이 적용되는 맥락을 설명하는 항목을 찾았습니다. 이는 여러분이 질문하신 내용과 직접적으로 관련이 있으며, 추가적인 이해를 돕기 위해 추천드립니다.

  • Outer join 질문: 이 질문과 답변은 LEFT JOIN과 함께 WHERE 절을 사용해 조인되지 않은 데이터를 필터링하는 방법에 대해 설명하고 있습니다. 여기에서는 ordersorder_items을 조인할 때, 어떻게 order_items에 없는 orders의 데이터를 찾을 수 있는지에 대한 설명을 제공합니다.

질문에 대한 정확한 답변과 예제로 인하여 SQL의 LEFT JOIN 사용법과 조건 필터링에 대해 더욱 깊이 이해할 수 있기를 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.