Programming/SQL

[Oracle] 조인(JOIN) : 자체조인(SELF JOIN) / 다중 JOIN

Jayna. 2024. 2. 13. 17:10
728x90

 

 

[Oracle] 조인(JOIN) : 카테시안 곱(CARTESIAN PRODUCT) / 교차(CROSS)조인 / 비등가 조인(NON EQUAL JOIN)

[Oracle] 조인(JOIN) : 포괄조인 / 외부(OUTER) 조인 (ANSI 조인 / Oracle 조인) [Oracle] 조인(JOIN) : 등가(EQUAL)조인 / 내부(INNER)조인 (ANSI 조인 / Oracle 조인) JOIN 두 개 이상의 테이블에서 데이터를 같이 조회하

jaynarecord.tistory.com

 

자체조인(SELF JOIN)

같은 테이블을 다시한번 JOIN 하는 경우 자기 자신의 테이블과 조인을 맺는다.

 

Oracle 구문

-- 사원 사번, 사수명, 사원 부서코드, 사원 급여/ 사수 사번, 사수명, 사수 부서코드, 사수급여
SELECT E.EMP_ID "사원 사번"
     , E.EMP_NAME "사원명"
     , E.DEPT_CODE "사원 부서코드"
     , E.SALARY "사원 급여"
     , M.EMP_ID "사수 사번"
     , M.EMP_NAME "사수명"
     , M.DEPT_CODE "사수 부서코드"
     , M.SALARY "사수 급여"
  FROM EMPLOYEE E, EMPLOYEE M
-- WHERE E.MANAGER_ID = M.EMP_ID; -- 사수가 있는 사람만 나옴
 WHERE E.MANAGER_ID = M.EMP_ID(+); -- 사수가 없는 사람도 나옴

ANSI 구문

SELECT E.EMP_ID "사원 사번"
     , E.EMP_NAME "사원명"
     , E.DEPT_CODE "사원 부서코드"
     , E.SALARY "사원 급여"
     , M.EMP_ID "사수 사번"
     , M.EMP_NAME "사수명"
     , M.DEPT_CODE "사수 부서코드"
     , M.SALARY "사수 급여"
  FROM EMPLOYEE E
  LEFT JOIN EMPLOYEE M ON (E.MANAGER_ID = M.EMP_ID);

 

다중 JOIN

-- 사번, 사원명, 부서명, 직급명
SELECT * FROM EMPLOYEE;   -- DEPT_CODE   JOB_CODE
SELECT * FROM DEPARTMENT; -- DEPT_ID
SELECT * FROM JOB;        --             JOB_CODE

 

Oracle 구문

SELECT EMP_ID 사번
     , EMP_NAME 사원명
     , DEPT_TITLE 부서명
     , JOB_NAME 직급명
  FROM EMPLOYEE E, DEPARTMENT D, JOB J
-- WHERE E.DEPT_CODE = D.DEPT_ID AND E.JOB_CODE = J.JOB_CODE; -- 부서가 없는 사람은 조회 X
 WHERE E.DEPT_CODE = D.DEPT_ID(+)
   AND E.JOB_CODE = J.JOB_CODE;

ANSI 구문

SELECT EMP_ID 사번
     , EMP_NAME 사원명
     , DEPT_TITLE 부서명
     , JOB_NAME 직급명
  FROM EMPLOYEE E
  LEFT JOIN DEPARTMENT D ON (E.DEPT_CODE = D.DEPT_ID)
  LEFT JOIN JOB J ON (E.JOB_CODE = J.JOB_CODE);
728x90

 

728x90