레이블이 #SQL강의인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #SQL강의인 게시물을 표시합니다. 모든 게시물 표시

2021년 10월 31일 일요일

오라클 SQL조인, 안티 조인(Anti Join)

 

오라클 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에서 별다른 힌트구문없이 그냥 실행 했을 때 해시조인 안티로 실행계획을 수립함을 확인할 수 있습니다.

wCU70_JevIH5JURdpfkg204SraVB4foHFMFP4Cbu


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)>

S3oBbHWFEvIRYkoyTfuFpIG797duAq9tPhubmG_R



#SQL조인, #조인이란, #안티조인, #AntiJoin, #SQL교육, #SQL강의, #오라클교육, #오라클, #오라클조인

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...