오라클 SQL조인, 안티 조인(Anti Join)
조인의 대상이 되는 테이블과 일치하지 않는 데이터를 추출하는 조인방식 입니다.
서브 쿼리의 테이블에는 없는 메인 쿼리의 테이블의 데이터만 추출하는 조인 방법으로 NOT IN, NOT EXISTS 사용시 발생하는 조인연산이며 오라클에서 중첩루프조인 안티, 머지조인 안티, 해시 조인 안티로 실행 됩니다.
NOT IN을 이용한 안티 조인 예문 입니다. EMP 테이블에서 사번, 성명, 부서코드를 추출하는데 부서코드를 가지고 있지않은 사원들만 추출하는 쿼리 문 입니다. “KING” 사원은 최고관리자로 부서코드(deptno) 값을 가지고 있지않지만 NULL값이므로 결과 대상에서 제외 되었습니다.(NULL과 연산하는 결과는 NULL이 됨) |
-- NOT IN SELECT empno, ename, deptno FROM emp WHERE deptno NOT IN ( SELECT deptno FROM dept ) |
<실행결과>
선택된 행 없음
<실행계획(F10)>
오라클19C에서 별다른 힌트구문없이 그냥 실행 했을 때 해시조인 안티로 실행계획을 수립함을 확인할 수 있습니다.
NOT EXISTS을 이용한 안티 조인 예문 입니다. DEPT 테이블에서 부서코드, 부서명을 출력 하는데 EMP 테이블에 부서원들을 가지고 있지 않은 부서코드, 부서명을 출력합니다. 40번 부서는 EMP 테이블에 해당하는 부서원들이 없습니다. HASH_AJ 힌트구문은 안티 해시조인을 하라는 힌트구문으로 사용하지 않으면 오라클19C에서는 머지조인 안티로 쿼리문을 수행 합니다. |
-- EXISTS SELECT deptno, dname FROM dept WHERE NOT EXISTS (SELECT /*+ HASH_AJ */ 1 FROM emp AND emp.deptno = dept.deptno) |
<실행결과>
DEPTNO | ENAME | |
1 | 40 | OPERATION |
<실행계획(F10)>
#SQL조인, #조인이란, #안티조인, #AntiJoin, #SQL교육, #SQL강의, #오라클교육, #오라클, #오라클조인