■ 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'*/;
'국비과정 > Oracle' 카테고리의 다른 글
| 국비 33일차 - [DDL] CREATE, DROP, 제약조건(NOT NULL, UNIQUE, CHECK, PRIMARY KEY FOREIGN KEY) (0) | 2022.05.12 |
|---|---|
| 국비 32일차 - [SUBQUERY] 서브 쿼리(단일행, 다중행, 다중열, 다중행 및 다중열), 인라인 뷰, WITH, RANK 함수 (0) | 2022.05.12 |
| 국비 30일 차 - [평가] 데이터베이스 구현 (0) | 2022.05.09 |
| 국비 29일 차 - [GROUP BY & HAVING, JOIN] GROUPING SETS, INNER JOIN (0) | 2022.05.09 |
| 국비 28일차 - [함수, GROUP BY & HAVING] 그룹 함수, GROUP BY, HAVING, 집계 함수 (0) | 2022.05.03 |
댓글