본문 바로가기

SQL/예제로 익히는 SQL 함수

JOIN | ON절과 WHERE절의 차이점

❗️JOIN - ON절과 WHERE절의 차이점

 

ON: join 전 조건을 필터링

WHERE : join 후에 조건을 필터링

 

  • on 절에 조건을 추가했을 때
select *
from THEGLORY t left join THEGLORY2 t2 on t.이름=t2.이름 
and t.직업 in ('아나운서', '선생님')

 

**조건은 조인을 하는 테이블, 즉 left join 기준 오른쪽 테이블에만 적용됨!

 

  • where 절에 조건을 추가했을 때
select *
from THEGLORY t left join THEGLORY2 t2 on t.이름=t2.이름 
where 직업 in ('아나운서', '선생님')

 

참고 문제

https://leetcode.com/problems/average-selling-price/

 

#ON절 (정답)
select p.product_id, ifnull(round(sum(p.price*u.units)/sum(u.units), 2), 0) as average_price
  from prices p 
  left 
  join unitssold u 
    on p.product_id=u.product_id 
   and purchase_date between start_date and end_date
group by 1

#WHERE절 (오답)
select p.product_id, ifnull(round(sum(p.price*u.units)/sum(u.units), 2), 0) as average_price
  from prices p 
  left 
  join unitssold u 
    on p.product_id=u.product_id 
 where purchase_date between start_date and end_date
group by 1

 

 

⇒ WHERE 절에 조건 적용 시, 조건을 만족하지 않는 값들은 모두 제외하고 조회하므로

   판매되지 않은 product_id 값들은 일괄 제외된다는 문제 발생.

 

 

⇒ WHERE 절에 조건 줬을 때 결과(오답)