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 |
---|