2018년 3월 28일 수요일

ANSI LEFT JOIN

** 참고
http://ultteky.egloos.com/10411192

**
테이블 EMP(사원), DEPT(부서) 가 있다고 하자.
사원 중 DEPT_CD 가 A01, A02 인 사원 중에
부서와 연결하여 EMP.EMP_NM(사원명), DEPT.DEPT_NM(부서명)을 가져오고 싶다.
단 부서 중에 유효한(VALID_YN = 'Y') 것만 연결을 하고 싶다.
부서와 연결 안된 사원도 모두 가져오고 싶다.

이럴때 아래와 같이 사용해야 한다.

SELECT EMP.EMP_NM, DEPT.DEPT_NM
FROM EMP
     LEFT JOIN DEPT
     ON(1=1
      AND DEPT.DEPT_CD = EMP.DEPT_CD
      AND DEPT.VALID_YN = 'Y'
     )
WHERE 1=1
  AND EMP.DEPT_CD IN ('A01', 'A02')

간단히 말하면
중요 테이블을 EMP 라고 하고 안중요 테이블은 DEPT 이라 했을 때
(DEPT 와 연결 안된 EMP 도 가져와야 하므로)

중요 테이블의 FILTER 는 WHERE 에 걸고(ON 에 걸면 안됨)
->
WHERE 1=1
  AND EMP.DEPT_CD IN ('A01', 'A02')

안중요 테이블의 FILTER 는 ON 에 걸어야 된다.(WHERE 에 걸면 안됨)
->
AND DEPT.VALID_YN = 'Y'

당연히 JOIN 조건(연결 조건)은 ON 에 걸어야 한다.(WHERE 에 걸면 안됨)
->
AND DEPT.DEPT_CD = EMP.DEPT_CD

**
OUTER 조인 말고 INNER JOIN 은
연결조건, 필터조건 모두 ON 에 걸든 WHERE 에 걸든 상관없다.

**
테스트 해봐야지...

댓글 없음:

댓글 쓰기

인기글

추천 게시물

윈도우에서 오라클 11g 삭제하기

* 참조 및 출처 https://wickedmagic.tistory.com/407 https://wookoa.tistory.com/304 * 윈도우에서 오라클 11g 삭제하기 > 서비스에서 오라클 관련 서비스 모두 종료 > Un...