on과 where의 차이점을 알아보자

lilseongwon·2023년 1월 8일
0
post-thumbnail

SQL 문제를 풀다가 문득 on과 where은 무엇이 다른지 궁금해졌다.

ON과 WHERE♻️

ON은 JOIN을 하기 전에 필터링을 하고, WHERE는 JOIN을 한 뒤에 필터링을 한다.
우선 INNER JOIN에서는 둘 다 같은 결과가 나온다.(MySQL 기준)

SELECT *
FROM a
INNER JOIN b
ON a.col = b.col
SELECT *
FROM a
INNER JOIN b
WHERE a.col = b.col

그렇다면 OUTER JOIN에서는 어떨까?
우선 테스트용 테이블을 만들었다.
테이블 1

테이블 2

ON 사용

SELECT t1.col1, t1.col2, t2.col1, t2.col2
FROM table1 t1
LEFT JOIN table2 t2
ON t1.col1 = t2.col1
AND t2.col2 = '일';

쿼리의 결과는 아래와 같다


→table1의 전체 로우와 table2에서 col2 값이 ‘일’인 로우만 뽑아서 OUTER JOIN한다.

WHERE 사용

SELECT t1.col1, t1.col2, t2.col1, t2.col2
FROM table1 t1
LEFT JOIN table2 t2
ON t1.col1 = t2.col1
WHERE t2.col2 = '일';

쿼리의 결과는 아래와 같다

→table1의 전체 로우와 table2의 전체 로우를 OUTER JOIN한 후, table2의 col2 값이 ‘일’인 로우만 뽑는다

결론⚡️

위에서 배운 내용들을 유의하여 필요에 따라 ON과 WHERE를 사용하면 좋을 듯 하다. 다만 중요한 것은 WHERE은 JOIN 뒤에 실행되므로 ON을 사용하지 않고 WHERE만을 사용하면 에러가 발생할 수 있다는 점을 주의하자

참고

https://developyo.tistory.com/121

profile
스프린트가 아닌 사이클링

0개의 댓글