DB-디비는 즐겁다

Oracle Database - 2)JOIN

광형 2022. 6. 29. 23:22
728x90
728x90
SMALL

https://kwanghyung.tistory.com/entry/Oracle-Database-1JOIN

 

Oracle Database - 1)JOIN

https://kwanghyung.tistory.com/entry/Oracle-Database-JOIN Oracle Database- JOIN https://kwanghyung.tistory.com/entry/Oracle-Database-%EC%A7%91%ED%95%A9%EC%97%B0%EC%82%B0%EC%9E%90 Oracle Database -..

kwanghyung.tistory.com

카테시안 곱(CARTESIAN PRODUCT) / 교차조인(CROSS JOIN)
    모든 테이블의 각 행들이 서로 매핑된 데이터가 조회된다.
    두테이블의 행들이 모두 곱해진 행들의 조합 출력
     각각 N개,M개의 행을 가진 테이블들의 카테시안 곱의 결과는 N*M행
     모든 경우의 수를 다 따져서 조회하겠다.
     방대한 데이터를 출력(과부화 위험)

사원명, 부서명
 오라클 구문
SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT; -- 23*9 =207행 조회

SELECT EMP_NAME,DEPT_TITLE 
FROM EMPLOYEE
CROSS JOIN DEPARTMENT;
WHERE절에 기술하는 조인 조건이 잘못되었거나 아예 없을 경우 발생하는 구문


   비등가 조인 (NON EQUAL JOIN)
    '=' 등호를 사용하지 않는 조인문 -> 다른 비교 연산자를 써서 조인하겠다(>,<,>=,<=,BETWEEN A AND B)
    ->지정한 컬럼값들이 일치하는 경우가 아니라 '범위'에 포함되는 경우 매칭해서 조회하겠다.
    
    등가 조인: '='로 일치하는 경우만 조회
    비등가 조인 : '='가 아닌 다른 비교연산자들로 "범위"에 포함되는 경우를 조회
    
    

사원명, 급여
SELECT EMP_NAME,SALARY
FROM EMPLOYEE;

SAL_GRADE 테이블 조회
SELECT*
FROM SAL_GRADE;

사원명,급여,급여등급(SAL_LEVEL)
 오라클구문
SELECT EMP_NAME,E.SALARY,S.SAL_LEVEL
FROM EMPLOYEE E, SAL_GRADE S
WHERE SALARY >= MIN_SAL AND SALARY <=MAX_SAL;
WHERE SALARY BETWEEN MIN_SAL AND MAX_SAL; --~이상 ~이하의 범위

 ANSI
SELECT EMP_NAME,SALARY,S.SAL_LEVEL
FROM EMPLOYEE E
JOIN SAL_GRADE S ON (SALARY>=MIN_SAL AND SALARY<=MAX_SAL);
JOIN SAL_GRADE S ON (SALARY BETWEEN MIN_SAL AND MAX_SAL);


    자체조인(SELF JOIN)
    
    같은 테이블끼리 조인하는 경우
    즉, 자기 자신과 조이하겠다.
    -> 자체 조인의 겨우 테이블에 반드시 별칭을 붙여줘야한다. (서로 다른 테이블인 것처럼 조인하겠다.)
    

SELECT * FROM EMPLOYEE E; --사원에 대한 정보를 추출할 테이블 
SELECT * FROM EMPLOYEE M; --사수에 대한 정보를 추출할 테이블


 사원의 사번,사원명,사수의 사번, 사수명
 오라클 구문
SELECT E.EMP_ID, E.EMP_NAME 사원명, E.MANAGER_ID 사수사번, M.EMP_NAME 사수명
FROM EMPLOYEE E,EMPLOYEE M  
WHERE E.MANAGER_ID=M.EMP_ID(+); --LEFT OUTER JOIN

ANSI 구문
SELECT E.EMP_ID 사번, E.EMP_NAME 사원명, E.MANAGER_ID 사수사번,M.EMP_NAME 사수명
FROM EMPLOYEE E
LEFT OUTER JOIN EMPLOYEE M ON (E.MANAGER_ID =M.EMP_ID);


    <다중조인>
    
    3개 이상의 테이블을 조인해서 조회하겠다.
    조인 순서가 중요하다.
    

사번, 사원명, 부서명, 직급명
일단 각 테이블을 따로 조회해보자
SELECT * FROM EMPLOYEE; --EMP_ID,EMP_NAME, DEPT_CODE, JOB_CODE
SELECT * FROM DEPARTMENT;                 --DEPT_ID,DEPT_TITLE
SELECT * FROM JOB;                                   --JOB_CODE,JOB_NAME          


합쳐보자
오라클 구문
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(+);


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
300x250
LIST