Oracle SQL
ORACLE_SQL_JOIN[2]
climb-up
2022. 3. 17. 21:36
<JOIN[1]와 다른 JOIN의 종류 정리>
JOIN 종류
1) NON-EQUI (비등가 조인)
2) SELF JOIN (자체 조인)
3) MULTIPLE JOINS (다중 조인)
1) NON-EQUI (비등가 조인)
-JOIN ON(비교 연산자)
<예시1>
-EMPLOYEE에 SAL_LAVEL이 없다는 전제하에 급여 등급을 조회.
SELECT EMP_NAME, SALARY, SAL_GRADE.SAL_LEVEL
FROM EMPLOYEE
JOIN SAL_GRADE ON(SALARY BETWEEN MIN_SAL AND MAX_SAL);
--JOIN SAL_GRADE ON(SLALRY >= MIN_SAL AND SALARY <= MAX_SAL); 이 방법도 가능
JOIN ON(비교 연산자)로 최소급여와 최대급여 사이를 조회해서 직원 전체의 등급을 조회할 수 있다.
2) SELF JOIN (자체 조인)
-같은 테이블 조인(다른 테이블 X)
<예시2>오라클 전용 구문
-각 사원의 관리자 조회.
SELECT E.EMP_ID, E.EMP_NAME, E.DEPT_CODE, E.MANAGER_ID, M.EMP_NAME 관리자이름
FROM EMPLOYEE E, EMPLOYEE M
WHERE E.MANAGER_ID = M.EMP_ID
ORDER BY EMP_ID;
NULL값은 빠지고 사원과 사원관리자를 한눈에 볼 수 있다.
<예시3>ANSI 전용 구문
SELECT E.EMP_ID, E.EMP_NAME 사원이름, E.DEPT_CODE, E.MANAGER_ID, M.EMP_NAME 관리자이름
FROM EMPLOYEE E
JOIN EMPLOYEE M ON(E.MANAGER_ID = M.EMP_ID)
ORDER BY EMP_ID;
<예시2>와 같은 코드
3) MULTIPLE JOINS (다중 조인)
2개 이상의 테이블 조인.
<예시4>오라클 전용 구문.
-사번, 이름, 부서코드, 부서 명, 지역 이름 조회
SELECT EMP_ID, EMP_NAME, DEPT_TITLE, LOCAL_NAME
FROM EMPLOYEE E, DEPARTMENT D, LOCATION L
WHERE DEPT_CODE = DEPT_ID--EMPLOYEE와 DEPARTMENT 연결
AND LOCATION_ID = LOCAL_CODE;--DEPARTMENT와 LOCATION 연결
테이블이 3개 이기때문에 1,2,3 --> 1과2 연결, 2와 3연결 해서 3개가 모두 연결되어있어야 한다.
WHERE절에 순서 바꾸기 문제 없음.
<예시5>ANSI 전용 구문.
SELECT EMP_ID, EMP_NAME, DEPT_TITLE, LOCAL_NAME
FROM EMPLOYEE E
JOIN DEPARTMENT D ON(DEPT_CODE = DEPT_ID)
JOIN LOCATION L ON(LOCATION_ID = LOCAL_CODE);
<예시4>와 같은 코드
<예시6>오라클 구문
직급이 대리이면서 아시아 지역에 근무하는 직원 사번, 이름, 직급 명, 부서 명, 근무 지역 명, 급여조회.
SELECT EMP_ID, EMP_NAME, JOB_NAME, DEPT_TITLE, LOCAL_NAME, SALARY
FROM EMPLOYEE E, JOB J, DEPARTMENT D, LOCATION
WHERE E.JOB_CODE = J.JOB_CODE
AND LOCATION_ID = LOCATION_CODE
AND DEPT_ID = DEPT_CODE
AND JOB_NAME = '대리'--직급이 대리
AND LOCAL_NAME LIKE 'ASIA%'--아시아 지역에 근무
<예시7>ANSI 구문
SELECT EMP_ID, EMP_NAME, JOB_NAME, DEPT_TITLE, LOCAL_NAME, SALARY
FROM EMPLOYEE E
JOIN JOB J ON(E.JOB_CODE = J.JOB_CODE)
JOIN DEPARTMENT D ON(DEPT_ID = DEPT_CODE)
JOIN LOCATION L ON(LOCATION_ID = LOCAL_CODE)
WHERE JOB_NAME = '대리' AND LOCAL_NAME LIKE 'ASIA%';
<예시6>와 같은 코드