본문 바로가기
국비과정/Oracle

국비 31일차 - [JOIN] OUTER JOIN, CROSS JOIN, NON EQU JOIN, SELF JOIN, 다중 JOIN

by Jeong.dev 2022. 5. 10.

  JOIN

1. INNER JOIN

2. OUTER JOIN

1) LEFT OUTER JOIN

2) RIGHT OUTER JOIN

3) FULL OUTER JOIN (오라클 구문 미지원, ANSI 구문만 가능)

-- ANSI 구문
SELECT E.EMP_NAME,
       D.DEPT_TITLE,
       E.SALARY,
       E.SALARY * 12
FROM EMPLOYEE E -- 얘가 기준
LEFT /*OUTER*/ JOIN DEPARTMENT D ON (E.DEPT_CODE = D.DEPT_ID)
ORDER BY DEPT_TITLE DESC;

-- 오라클 구문
SELECT E.EMP_NAME,
       D.DEPT_TITLE,
       E.SALARY,
       E.SALARY * 12
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DEPT_CODE = D.DEPT_ID(+) -- 오른쪽 컬럼에 + 표시
ORDER BY D.DEPT_TITLE DESC;

 

 

3. CROSS JOIN

- 카테시안 곱이라고도 함

- 두 테이블의 행들이 곱해진 조합 출력

-- ANSI 구문
SELECT E.EMP_NAME, D.DEPT_TITLE
FROM EMPLOYEE E
CROSS JOIN DEPARTMENT D -- 23 * 9 = 207
ORDER BY D.DEPT_TITLE;

-- 오라클 구문
SELECT E.EMP_NAME, D.DEPT_TITLE
FROM EMPLOYEE E, DEPARTMENT D
ORDER BY D.DEPT_TITLE;

 

 

4. NON EQU JOIN

- 조인 조건에 등호(=) 사용하지 않는 조인

- > < >= <= BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN 사용

SELECT *
FROM EMPLOYEE E
INNER JOIN SAL_GRADE S ON(E.SALARY BETWEEN S.MIN_SAL AND S.MAX_SAL);

 

 

5. SELF JOIN

- 동일한 테이블 조인

-- ANSI 구문
SELECT E.EMP_ID,
       E.EMP_NAME,
       E.DEPT_CODE,
       M.EMP_ID,
       M.EMP_NAME
FROM EMPLOYEE E
LEFT JOIN EMPLOYEE M ON(E.MANAGER_ID = M.EMP_ID);

 

 

6. 다중 JOIN

- 테이블 여러개 조인

- 조인 구문 작성 시 순서 중요

SELECT * FROM EMPLOYEE; -- DEPT_CODE
SELECT * FROM DEPARTMENT; -- DEPT_ID    LOCATION_ID
SELECT * FROM LOCATION; --              LOCAL_CODE

-- ANSI 구문 (다중 조인 순서가 중요)
SELECT E.EMP_ID,
       E.EMP_NAME,
       D.DEPT_TITLE,
       L.LOCAL_NAME
FROM EMPLOYEE E
LEFT JOIN DEPARTMENT D ON E.DEPT_CODE = D.DEPT_ID
INNER JOIN LOCATION L ON D.LOCATION_ID = L.LOCAL_CODE
/*WHERE L.LOCAL_NAME = 'ASIA1'*/;

 

 

댓글