JS' 공부흔적

[SQL] JOIN ~ ON과 WHERE의 차이 본문

SQL

[SQL] JOIN ~ ON과 WHERE의 차이

이준수 2023. 9. 27. 21:46

우선, 내가 SQL문을 작성하는 환경은 Oracle이다. 따라서 조인의 종류를 명시하지 않고 그냥 JOIN이라고 작성하면 INNER JOIN을 의미한다.

 

하나 이상의 테이블이 있으면 이를 조인해서 사용한다. 이때 ON에 조건을 작성한다.

프로그래머스의 과일로 만든 아이스크림 고르기 문제를 통해 되새겼다.

결론적으로 아이스크림의 맛을 조회해야 한다. 이때 조건에서 확인해야 하는 필드는 총주문량, 주성분인데 이 두 필드는 각각 다른 테이블에 존재하므로 두 테이블을 조인해야한다. 두 테이블에서 겹치는 필드는 FLAVOR이므로 ON에는 두 테이블의 FLAVOR가 같다는 조건을 설정해야 한다. 이외 나머지 조건을 적용하면 아래와 같다.

SELECT F.FLAVOR
FROM FIRST_HALF F JOIN ICECREAM_INFO I ON F.FLAVOR=I.FLAVOR
WHERE F.TOTAL_ORDER>3000 AND I.INGREDIENT_TYPE='fruit_based'
ORDER BY F.TOTAL_ORDER DESC

 

그러나 아래처럼 작성해도 결과가 동일하다.

SELECT F.FLAVOR
FROM FIRST_HALF F, ICECREAM_INFO I
WHERE F.FLAVOR=I.FLAVOR AND F.TOTAL_ORDER>3000 AND I.INGREDIENT_TYPE='fruit_based'
ORDER BY F.TOTAL_ORDER DESC

 

JOIN ~ ON과 WHERE의 차이가 뭘까?

JOIN ~ ON은 ON에 작성한 조건을 통해 한 번 거르고 조인하는 것이다.

반면에 WHERE는 일단 조인한 후에 조건을 통해 거른다.

즉, JOIN ~ ON은 거르고 조인, WHERE는 조인 후 거른다고 생각하면 된다.

사실 INNER JOIN에서는 결과가 같지만, 다른 조인을 사용할 경우 WHERE을 사용할 경우에 원하는 결과가 나오지 않을 수 있다. 또한, 결과가 같더라도 JOIN에 관한 조건은 ON에 명시하는 게 가독성이 좋다고 여겨지므로 JOIN ~ ON과 WHERE를 잘 구분하여 써야겠다.

728x90
반응형