JOIN에서 ON절과 WHERE절의 차이

 

같은 조건이라도 JOIN할 때 ON절에 조건을 넣을 때와 WHERE절에 조건을 넣을 때

쿼리 결과는 다르다. 어떻게 다른지 두 테이블을 살펴보자.

 

1) SELECT *

    FROM employee a

    LEFT OUTER JOIN department b

    ON a.department_no = b.department_no

    WHERE b.location = 'korea';

 

2) SELECT *

    FROM employee a

    LEFT OUTER JOIN department b

    ON a.department_no = b.department_no

       AND b.location = 'korea';

 

1)의 경우에는 employee테이블과 department 테이블이 outer join을 한 후

location이 korea인 값들만 추출한다.

 

2)의 경우에는 department 테이블에서 location이 korea인 값만 employee 테이블과 조인한다.

 

따라서 결과는

1)에는 location이 korea인 값만 존재하지만

2)에서는 location이 korea가 아닌 값도 존재하게된다.

 

 

employee 테이블                                  

employee_id 

 department_no

 1000

 10

 1001

 10

 1002

 20

 

 

department 테이블

 department_no

location 

 10

 korea

 20

 usa

 

 

1)    1000, 10, korea

       1001, 10, korea

 

2)    1000, 10, korea

       1001, 10, korea

       1002, 20, null

 

 

 

2)의 쿼리를 풀어서 다른 방식으로 써보면

 

3) SELECT *

    FROM employee a

    LEFT OUTER JOIN ( SELECT *

                              FROM department

                              where location = 'korea' ) b

    ON a.department_no = b.department_no;

 

3)과 같다.

 

출처 : http://blog.leocat.kr/notes/2017/07/28/sql-join-on-vs-where

*해당 출처를 참고하여 작성한 글입니다.

'SQL' 카테고리의 다른 글

[SQL]ibatis에서 where 1=1과 1=2  (0) 2017.08.20

+ Recent posts