통상 SQL문에서 사용하는 조건절인 WHERE과, JOIN조건에서 사용하는 조건절인 ON은 그 과정과 결과에서 차이점이 존재한다.
SELECT CUSTOMER_NAME
FROM CUSTOMER
WHERE CUSTOMER_ID IN (10, 20, 30)
기본적으로 SQL 진행순서가 FROM - WHERE - IN의 순으로 진행한다는 것을 이해하고 있다면 선별결과를 출력한다는 것을 어렵지않게 예상할 수 있다.
위 SQL문은 CUSTOMER_IN가 10, 20, 30일 경우에만 CUSTOMER_NAME을 출력한다.
SELECT c.CUSTOMER_NAME, d.DEPARTMENT_NAME
FROM CUSTOMER c
WHERE INNER JOIN DEPARTMENT d
AND c.CUSTOMER_ID = d.DEPARTMENT_ID
ON d.name LIKE '%' || '전략기획' || '%'
단계적으로 쿼리진행순서를 파악하고 있다면 이해가 쉬울 수 있다.
여기서 중요한 점은 일단 두 table을 join한다는 것이다.
그 후, WHERE 조건절을 통해 CUSTOMER_ID의 조건이 만족하는 것만 먼저 레코드로 출력한다.
선별된 join 결과를 바탕으로 join 조건절인 ON을 보게되고, 이때 department name이 전략기획일 경우에만 결과를 내보낸다.
이때 join한 상태는 그대로 둔다. 다만 join 조건에서 참일 경우에만(전략기획부서) 기존 join 결과를 그대로 출력하고, 아닐 경우(전략기획부서가 아닌 다른 부서) 기존 join결과를 null로 출력한다.
WHERE 조건절은 결과범위를 제한하고, ON 조건절은 join을 위한 조건절로 이해하면 될 것 같다.
참고로 Oracle에서는 WHERE 조건절에서 (+)기호를 쓰면 join조건으로 인식한다.
따라서 (+)기호를 사용하면 ON 구문을 사용한 것과 같은 효과를 낼 수 있으므로 이를 참고하여 진행한다.