인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

JE님의 프로필 이미지

작성한 질문수

데이터 분석 SQL Fundamentals

Inner 조인, Left/Right Outer 조인, Full Outer 조인의 이해

섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문

작성

·

61

·

수정됨

0

안녕하세요.

섹션2 조인 기반 메커니즘에서

조인 실습 - 04 강의 중

예제에서 질문이 있습니다.

 

-- 고객명 Antonio Moreno이 1997년에 주문한 주문 상품 정보를 고객 주소, 주문 아이디, 주문일자, 배송일자, 배송 주소 및 

-- 주문 상품 아이디, 주문 상품명, 주문 상품별 금액, 주문 상품이 속한 카테고리명, supplier명을 구할 것. 

 

select

a.contact_name, a.address, b.order_id, b.order_date, b.shipped_date, b.ship_address, c.product_id, d.product_name, c.amount, e.category_name, f.contact_name as supplier_name

from nw.customers a

join nw.orders b on a.customer_id = b.customer_id

join nw.order_items c on b.order_id = c.order_id

join nw.products d on c.product_id = d.product_id

join nw.categories e on d.category_id = e.category_id

join nw.suppliers f on d.supplier_id = f.supplier_id

where a.contact_name = 'Antonio Moreno'

and b.order_date between to_date('19970101', 'yyyymmdd') and to_date('19971231', 'yyyymmdd')

 

이 예제에서 볼드친 product_id를 order_items 테이블이 아닌 products 테이블의 product_id로 끌어와도 괜찮은지 궁금합니다.

결과는 동일하게 나오는데 혹시나 차이가 있는지 궁금합니다.

답변 2

0

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

안녕하십니까,

적어주신 SQL로는 뭘 변경하고 싶으신건지 제가 잘 이해하지 못했습니다.

원본 실습 SQL에서 뭘 바꾸셨는지 좀 더 상세히 기술해 주십시요. 그리고 table alias 도 변경하지 마시고 원본 실습 SQL과 동일한 alias 명으로 주시고, 변경된 부분에 대해서는 Bold하게 표시해 주십시요.

감사합니다.

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

네 질문 수정하였습니다!

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

네, select 절에 사용 시 order_item의 product_id이든 product의 product_id 이든 아무거나 사용하셔도 무방합니다. 왜냐하면 product_id로 두 테이블 모두 모두 동일한 조건으로 join 되었기 때문입니다.

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

네 답변 감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. JE님, 질문 주셔서 감사합니다.

당신의 질문은 SQL 쿼리에서 product_idorder_items 테이블이 아닌 products 테이블에서 가져와도 괜찮은지에 대한 것입니다. 이 경우의 차이를 살펴보겠습니다.

  1. 참조 무결성: order_items 테이블에서 product_id는 보통 products 테이블의 product_id와 일대일 참조 관계가 있습니다. 그러므로 두 테이블에서 동일한 product_id 값을 가져오게 되며 SQL 결과에는 영향을 미치지 않습니다.

  2. 퍼포먼스: 쿼리 성능에는 차이가 없습니다. 두 테이블 간의 외래 키 관계가 제대로 설정되어 있다면, JOIN 을 통해 데이터를 가져올 때 product_idorder_items 또는 products 테이블 어느 쪽에서 가져와도 성능 상 차이가 나지 않습니다.

  3. 명확성: SQL 쿼리에서는 명확성이 중요합니다. 따라서 order_items 테이블에서 product_id를 가져오는 것이 더 직관적입니다. 왜냐하면 order_itemsproduct_id가 실제로 사용하는 곳이기 때문입니다. 그러나 실제 데이터 무결성을 유지하고 있으며 JOIN 조건이 올바르다면, products 테이블에서 가져와도 실질적인 차이는 없을 것입니다.

이미 이전에 유사한 질문 및 답변이 있어 관련 링크를 공유합니다:

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

JE님의 프로필 이미지

작성한 질문수

질문하기