db 초보 문제 푸는데 join 질문있어요..
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;
원래 맞는 쿼리가 이건데
select *
from orders o
inner join users as u on o.user_id=u.user_id
inner join products as p;
제가 잘 몰라서 이렇게 했거든요. (products join시 on을 안씀)
그런데 실행이 돼서 테이블이 나오던데.. 무슨 기준으로 inner join 된건가요?
inner join이 공통된 부분을 조인 하는 것으로 아는데
그래서 orders랑 users랑 테이블 조인은 user_id를 기준으로 join을 했고 이 결과로 나온 것을
다시 product 테이블이랑 해야하는데 이때는 뭘 기준으로해서 테이블이 조인된건가요?
gpt 물어보니 on 없으면 안되는게 정상이라는데;;ㅠㅠ
이론적으로는 Natural Join이라고 ON없이도 칼럼명이 같으면 조인되는 경우가 있는데 ON으로 조인 조건을 명시하지 않으면 axb모든 케이스인 Cross Join으로 보여질거예요 - dc App
cross join은 1-4 2-5 3-6 일때 14 15 16 24 25 26 34 35 36으로 9개생깁니다 - dc App
@딘퐁 감사합니다 선생님!! 그런데 gpt가 원래 안되어야한다는데 되는걸보면 이게 정상적인것은 아닌건가요? mysql입니다
@ㅇㅇ(125.242) ai를 너무 믿지마세요 gpt가 된다고 하는데 왜 안되냐고 묻는게 질문입니까!? - dc App
@딘퐁 정상적인 결과라면 조인결과가 14 25 36이 나와야 합니다 - dc App
@ㅇㅇ(125.242) 3개 9개 차이가 뭔지 봐보세요 - dc App
@딘퐁 죄송합니다 선생님 말씀대로 확인해보니 orders랑 users 를 조인한 테이블의 한행마다 products 테이블의 한행에 모두 대응해서 죄다 생겨버리네요
@ㅇㅇ(125.242) 네 그걸 크로스 조인이라고 부릅니다 X자 느낌 - dc App
조인조건을 명시안하면 모든놈끼리 카테시안곱이 될듯