728x90
자체조인(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