-
Oracle - JOIN 사용 시 ON과 WHERE의 차이Database/Oracle 2023. 2. 21. 14:14
JOIN 사용 시 ON과 WHERE의 차이
쿼리문 01
SELECT * FROM TBLD_01 a LEFT JOIN TBLD_02 b ON (a.aa == b.aa) WHERE b.cc = 7;
위 쿼리문의 경우 TBLD_01과 TBLD_02 테이블에 대해서 OUTER JOIN을 수행한 후 b.cc = 7인 데이터들을 추출한다.
위 쿼리문의 작업 순서는 아래와 같다.
1. TBLD_01과 TBLD_02 테이블의 OUTER JOIN 수행
2. OUTER JOIN 결과들 중 b.cc = 7인 데이터들을 추출
쿼리문 02
SELECT * FROM TBLD_01 a LEFT JOIN TBLD_02 b ON (a.aa = b.aa AND b.cc = 7);
하지만, 위 쿼리문의 경우 TBLD_01과 cc 속성 값이 7인 TBLD_02 테이블에 대해서 OUTER JOIN을 수행한 결과가 나온다.
쿼리문의 작업 순서는 아래와 같다.
1. TBLD_01과 cc 속성 값이 7인 TBLD_02 테이블의 OUTER JOIN 수행
결과
TBLD_01 TBLD_02 aa | bb aa | cc ------- ------- 1 | 4 1 | 7 2 | 5 2 | 8 3 | 6
위와 같은 TBLD_01 테이블과 TBLD_02 테이블이 있다고 가정해 보겠다.
aa | bb | aa | cc ------------------------------ 1 | 4 | 1 | 7
쿼리문 01의 결과는 위와 같다.
aa | bb | aa | cc ------------------------------ 1 | 4 | 1 | 7 2 | 5 | 2 | 8 3 | 6 | null | null
쿼리문 02의 결과는 위와 같다.
결과를 보면 알 수 있듯이, ON과 WHERE의 차이점은 JOIN을 할 대상이 달라지는 것이다.
출처
ㆍ https://blog.leocat.kr/notes/2017/07/28/sql-join-on-vs-where
728x90'Database > Oracle' 카테고리의 다른 글
Oracle - BETWEEN AND (0) 2022.05.02 Oracle - 조건문(IF, CASE) (0) 2022.04.27 Oracle - MERGE INTO (0) 2022.04.26 Oracle - 반복문(LOOP, WHILE, FOR) (0) 2022.04.25 Oracle - 변수 및 상수 선언 (0) 2022.04.25