본문 바로가기

개발 지식/DB

[RDBMS] JOIN 내 ON과 WHERE의 차이

반응형

이전에 사용했었던 예시 테이블을 가지고 설명을 해보겠다.

  • user 테이블 : 유저 아이디, 유저 이름 컬럼 존재
  • board 테이블 : 게시글 고유번호(id), 게시글 제목, 게시글 내용, 글쓴이 아이디(유저 아이디)

테이블 구조
모든 값들을 조회한 결과

JOIN에서의 ON과 WHERE의 차이점은 조인하는 범위가 다르다는 것이 기본적인 차이점이다. 아래 두 가지 query문들은 모두 LEFT JOIN을 수행하는 OUTER JOIN이다.

 

WHERE 절 사용한 경우
WHERE 절을 사용하지 않은 경우

첫번째는 WHERE 절을 실행한 경우고, 두번째는 WHERE 절을 사용하지 않았다. 첫번째의 경우는 user와 board 테이블의 OUTER JOIN을 수행한 후에 b.writer=0인 데이터들을 추출하지만 두번째의 경우는 (user 테이블)과 (board 테이블 중 board.writer=0인 경우)를 OUTER JOIN 한 결과가 나온다.

 

따라서 첫번째 WHERE절을 사용한 결과는 b.writer=0인 데이터만 존재하지만 두번째의 결과는 b.writer=0이 아닌 데이터도 존재한다. 결국 ON과 WHERE의 경우는 JOIN을 할 범위가 다르다는 뜻이다.


REFERENCE : https://blog.leocat.kr/notes/2017/07/28/sql-join-on-vs-where

반응형