❗️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 절에 조건 줬을 때 결과(오답)
'SQL > 예제로 익히는 SQL 함수' 카테고리의 다른 글
[MySQL] DATEDIFF, TIMESTAMPDIFF, INTERVAL (0) | 2024.05.30 |
---|---|
[컬럼 만들기] 회원가입 각 단계 전환율 구하기 - SQL Challenge 세션 과제2 (0) | 2024.05.30 |
[SQL] 이동평균을 통해 매출 추이 살펴보기 (1) | 2024.05.23 |
총량 + 특정 조건 동시에 집계하기 (SUM(CASE WHEN ...)) (0) | 2024.05.14 |
MOD | SQL에서 나머지와 몫 (짝수, 홀수) (0) | 2024.05.08 |