인프런 커뮤니티 질문&답변
ON을 명시하지 않았을 경우 질문드립니다.
작성
·
31
0
문제 3번을 풀다가
select *
from orders o
inner join users as u on o.user_id=u.user_id
inner join products as p;이러한 쿼리를 작성하게 되었습니다.
실행 결과로 오류 없이 테이블이 나왔습니다.
그래서 이걸 바탕으로 문제를 풀었다가 결과가 답안과 달라 문제점을 찾다가 on o.product_id=p.product_id 을 작성하지 않은 잘못된 쿼리라는 것 알았습니다.
여기서 질문이 있습니다.
inner join이 공통된 부분을 join하는 것이라고 하셨는데,
orders와 users를 조인 후 products를 조인 할 때 제가 작성한 쿼리의 경우 연결 조건인 ON을 지정하지 않았는데 어떻게 join하여 결과 테이블이 나올 수 있는 것인가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. yoon6669님.
질문에서 언급하신 상황에 대해 설명드리겠습니다. SQL에서 INNER JOIN을 사용할 때는 보통 두 테이블 간의 조인 조건을 명시하는 것이 일반적입니다. 조인 조건은 ON 절을 통해 어느 컬럼을 기준으로 두 테이블을 연결할지를 지정하는 것입니다.
하지만, 작성하신 쿼리에서 orders와 products를 조인할 때 ON 조건을 명시하지 않으셨습니다. 이 경우, 카티전 곱(Cartesian Product) 이 발생하여 두 테이블의 가능한 모든 조합을 결과로 반환하게 됩니다.
INNER JOIN에ON조건을 명시하지 않으면 두 테이블의 각 행이 서로 조합되어 많은 수의 결과를 반환할 수 있습니다. 결과적으로, ‘조인’의 의미가 없어지고, 원하지 않는 결과를 얻게 됩니다.
“INNER JOIN’에서 ‘ON’ 절이 없을 경우 쿼리는 카티전 곱을 생성하며, 이는 메모리와 성능 측면에서 비효율적일 뿐만 아니라 원하는 결과를 반환하지 못할 수 있습니다. 따라서 항상 조인 조건을 명확히 지정하는 습관을 들이는 것이 중요합니다.
두 테이블을 올바르게 조인하기 위해서는 두 테이블 간의 연관된 필드에 대해 ON 절을 사용하여 조인 조건을 설정해야 합니다.
추가적으로 더 설명이나 예시가 필요하시다면, 아래 유사한 예제를 참고해 보시기 바랍니다:
- 내부 조인, 외부 조인에 대해 질문 드립니다.: 내부 조인은 두 테이블 간의 공통된 부분을 명시적으로 조인하는 방식으로
ON절을 사용하는 것이 필요하며, 해당 절이 없을 경우 카티전 곱이 발생할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




