강사님 조건에 하나일때와 두개 일때가 차이가 있더라구요
제가 작성한 SQL
select * from nw.orders o where o.order_id in ( select max(order_id) from nw.orders a group by a.customer_id );
강사님이 작성한 SQL
select * from nw.orders where (customer_id, order_date) in (select customer_id, max(order_date) from nw.orders group by customer_id);
강사님 서브쿼리 강의 추가해주셔서 감사합니다.
제 기억에는 강사님께서 IN 연산자로 사용할 경우 세미 조인처럼 연결된다고 하셨던거 같은데 실행을 해보니까
조건이 하나 일때에는 세미 조인이지만
조건이 2개가 되니까 해쉬 조인으로 바뀌더라구요
그 이유가 궁금합니다.
답변 1
1
안녕하십니까,
서브쿼리는 조인과 비슷한 세미조인으로 내부적으로 수행될 수 있는데, 이게 특정 조건에 따라 완전 조인으로 풀릴 수 있습니다.
(백프로 확실한건 아닌데) 세미조인을 하지 않고 완전 조인으로 풀리는 경우는 서브쿼리가 명확하게 1의 레벨로 될 때 그렇게 될 확률이 높습니다.
가령 select customer_id, max(order_date) from nw.orders group by customer_id) 는 group by 컬럼인 customer_id로 1의 집합이 명확하게 됩니다(그러니까 distinct가 필요 없습니다)
그런데 select max(order_id) from nw.orders a group by a.customer_id 는 max(order_id)가 동일한 값이 나올 수도 있습니다. 그렇게 때문에 완전 해쉬 조인이 아니라 세미 해쉬 조인으로 풀린것 같습니다.
감사합니다.
'레벨 유지'의 의미에 대한 질문
0
53
2
date_part
0
55
2
lag/lead offset 관련 질문
0
55
2
join 관련 질문 (inner join, left join)
1
100
2
배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요?
0
89
2
Madrid에 살고 있는 고객이 주문한 주문 정보를 구할것. 실습 질문드립니다
0
53
2
rollup시 null값 매출 라벨링
0
54
2
10. 조인 실습 - 02 관련 질문
0
59
1
조인실습03 - join의 pk-fk join
0
108
2
조인실습03 - join의 pk-fk join
0
68
2
(공유)맥, 스키마 import
0
81
2
sql 입문자인데, 이 강의와 sql 코딩테스트와 연관이 있을까요?
0
137
2
1인지 M인지는 결국엔 테이블을 직접 확인을 해야 하는걸까요?
0
131
2
안녕하세요. 튜닝핵심가이드강의 관련해서 여쭤보고 싶어서 남깁니다.
0
91
1
섹션5 Group by 실습-01 강의 예제 질문
0
117
2
섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문
0
124
2
섹션2 조인 실습 01 강의 질문
0
133
2
lead lag 이해 강의에서 윈도우 절은 사용되지 않습니다.
0
127
1
Dbeaver오류
0
630
2
직원 별 가장 높은 매출
0
118
1
강의순서대로 실습코드순알려주세요.
0
133
1
m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?
0
130
1
rollup
0
91
2
Dbeaver에 접속해도 postgressql이 네비게이터에 안보입니다.
0
355
2





