새소식

반응형
DataBase

[SQL] JOIN ON 절과 WHERE 절 차이

  • -
반응형

SQL의 join에서 on 절과 where 절의 차이점은 join 하는 범위 및 결과가 다르다.

 

예시로 아래 m_user, m_right 2개의 테이블이 있다. 

 

Table 1 - m_user

 

Table 2 - m_right

 

보면 겹치는 내용이 right_seq, site_code 2개 컬럼이 있다.

 

1. LEFT OUTER JOIN, ON 절에 AND 연산 조건

// LEFT OUTER JOIN, ON 절에 AND 연산 조건
select mu.u_id, mu.u_email, mr.right_seq, mr.site_code
from m_user mu LEFT OUTER JOIN m_right mr ON mu.site_code = mr.site_code AND mr.right_seq = 2;

위 내용을 보면 LEFT JOIN ON절에 AND 연산을 써서 right_seq에 조건을 줬다.

 

결과

 

LEFT JOIN 이기 때문에 m_user 기준으로 site_code 가 같은것 중 right_seq = 2인것은 데이터가 나오지만

나머지는 null값으로 보여진다.

 

간단하게 얘기하면 LEFT JOIN을 하면서 조건을 주기 때문에 없는 데이터도 결과값에 나온다.

 

 

2. LEFT OUTER JOIN 과 WHERE 조건절

select mu.u_id, mu.u_email, mr.right_seq, mr.site_code
from m_user mu LEFT OUTER JOIN m_right mr ON mu.site_code = mr.site_code
WHERE mr.right_seq = 2;

 

결과

JOIN ON 절에 AND 조건을 줬던것과 결과가 다르다.

LEFT JOIN을 하고 난 후 WHERE 절을 통해 조건을 주기 때문에 right_seq 2인 친구만 결과값에 나온다.

 

즉, LEFT OUTER JOIN 의 ON 절에 AND 연산을 통해 조건을 줬을 경우 LEFT JOIN을 하면서 조건이 들어가기 때문에

없는 데이터 ROW도 NULL을 통해 결과 값에 나온다. 하지만 WHERE 절은 LEFT OUTER JOIN을 하고 난 결과값에

WHERE 조건을 주기 때문에 right_seq가 2인 ROW 값만 나온다.

반응형

'DataBase' 카테고리의 다른 글

Mysql 재귀 쿼리(RECURSIVE)  (0) 2022.08.30
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.