join on, where 조건 차이

태평양돌고래·2021년 6월 14일
0

query

목록 보기
1/4

Read 쿼리를 짜다보면 원하는 조건을 걸게 되는데,
조인을 할 경우 join의 on, where은 join시키는 범위가 달라진다.

on에 조건을 걸면, join 대상 테이블을 on 조건에 따라 필터를 건 후에 join을 하고,
where절에 조건을 건다면, join 결과에 해당 조건으로 필터가 된다.

빅쿼리 공개 데이터셋으로 확인 해 보면 다음과 같다.
야구 경기 중, 낮 경기가 몇 경기였는지 보기 위해 쿼리를 작성하면,

  • 참고
    games_wide Table에는 경기 내용이 담겨있고,
    schedules Table에는 경기 정보가 담겨있다.

1. where 절에 조건을 거는 경우

	select
		b.dayNight day_night,
	    	count( distinct a.gameId ) game_cnts,
            
	  from
		`bigquery-public-data.baseball.games_wide` a
		left join `bigquery-public-data.baseball.schedules` b on a.gameId = b.gameId
    
	 where 	1=1
	   and  b.dayNight = 'D'
       
      group by 	1

결과

2. join on 절에 조건을 거는 경우

	select
		b.dayNight day_night,
	    	count( distinct b.gameId ) game_cnts,
            
	  from
		`bigquery-public-data.baseball.games_wide` a
		left join `bigquery-public-data.baseball.schedules` b on a.gameId = b.gameId
                                                                     and b.dayNight = 'D'
    
	 where 	1=1
       
      group by 	1

결과

Table b에서 daynight = 'D'인 경우만 가져와서 join하므로,
gameId와 매칭되지 않은 경기 정보들은 null값을 보인다.

해당 테이블의 경우 D( day, 낮 )와 N( night, 밤 )으로만 구분되어 있으므로, 여기서 null값은 밤 경기로 손쉽게 추정할 수 있다.

물론 낮/밤 경기 수 규모를 보려면 이렇게 하지는 않겠지만, where절과 join on 절의 차이를 보기 위해 기록 해 두는 것 이므로 이 점 감안해야겠다.

0개의 댓글