반응형
JOIN
두 개 이상의 테이블을 하나로 합쳐서 결과를 조회함.
오라클 전용 구문과 ANSI 표준 구문으로 나눔
1 . OUTER JOIN
(LEFT, RIGHT,FULL)
2 . NON EQUAL JOIN
3. SELF JOIN
4. 다중 JOIN
1. 오라클 전용 구문
- FROM절에 MAIN TABLE명과 JOIN할 TABLE명을 작성하고, WHERE절에 JOIN 할 컬럼명을 작성
SELECT
EMP_ID
, EMP_NAME
, DEPT_CODE
, DEPT_TITLE
FROM EMPLOYEE 메인 테이블
, DEPARTMENT 조인할 테이블
WHERE DEPT_CODE = DEPT_ID; 조인할 컬러명
- JOIN할 두 컬럼명이 같은 경우에 별칭사용
SELECT
E.EMP_ID
, E.EMP_NAME
, E.JOB_CODE
, J.JOB_NAME
FROM EMPLOYEE E
, JOB J
WHERE E.JOB_CODE = J.JOB_CODE;
2 . ANSI 표준 구문
- FROM절에 MAIN 테이블명 JOIN 합치기 할 테이블명 USING(컬럼명) 또는 ON(컬럼명)을 작성함.
- 연결에 사용할 컬럼명이 같은 경우 USING(컬럼명)을 사용
SELECT
EMP_ID
, EMP_NAME
, JOB_CODE
, JOB_NAME
FROM EMPLOYEE
JOIN JOB USING(JOB_CODE);
- 연결에 사용할 컬럼명이 다른 경우 ON()을 사용
SELECT
EMP_ID
, EMP_NAME
, DEPT_CODE
, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
- 컬럼명이 같은 경우에도 ON사용 가능
SELECT
E.EMP_ID
, E.EMP_NAME
, E.JOB_CODE
, J.JOB_NAME
FROM EMPLOYEE E
JOIN JOB J ON(E.JOB_CODE = J.JOB_CODE);
- 부서 테이블과 지역 테이블을 조인하여 테이블에 있는 모든 데이터를 조회하기
(1) ANSI 표준 방식
SELECT
*
FROM DEPARTMENT
JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE);
(2) ORACLE 전용 방식
SELECT
*
FROM DEPARTMENT D
, LOCATION L
WHERE D.LOCATION_ID = L.LOCAL_CODE;
OUTER JOIN
INNER JOIN : 일치하는 값이 없는 행은 조인에서 제외됨. 묵시적
OUTER JOIN : 컬럼값이 일치하지 않는 행도 조인에 포함시킴. 명시적
1. LEFT OUTER JOIN
- 테이블 중 왼편에 기술 된 테이블을 기준으로 JOIN
- 오라클 구문은 (+)를 사용
(1) ANSI 표준
SELECT
EMP_NAME
, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
(2) 오라클 전용 구문
SELECT
EMP_NAME
, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID(+);
2. RIGHT OUTER JOIN
- 두 테이블 중 오른편에 기술 된 테이블을 기준으로 JOIN
(1) ANSI 표준
SELECT
EMP_NAME
, DEPT_TITLE
FROM EMPLOYEE
RIGHT JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
(2) 오라클 전용 구문
SELECT
EMP_NAME
, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE(+) = DEPT_ID;
3. FULL OUTER JOIN
- 두 테이블이 가진 모든 행을 결과에 포함하여 JOIN
- 오라클 전용 구문은 FULL OUTER JOIN 불가능
(1) ANSI 표준
SELECT
EMP_NAME
, DEPT_TITLE
FROM EMPLOYEE
FULL JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
CROSS JOIN
조인되는 테이블의 각 행들이
모두 매핑 된 데이터가 검색되는 방법(카테이션 곱)
NON EQUAL JOIN
지정한 컬럼의 값이 일치하는 경우가 아닌,
값의 범위에 포함되는 행들을 연결하는 방식
(1) ANSI 표준
SELECT
EMP_NAME
, SALARY
, E.SAL_LEVEL "EMPLOYEE의 SAL_LEVEL"
, S.SAL_LEVEL "SAL_GRADE의 SAL_LEVEL"
FROM EMPLOYEE E
JOIN SAL_GRADE S ON(SALARY BETWEEN MIN_SAL AND MAX_SAL);
(2) 오라클 전용
SELECT
EMP_NAME
, SALARY
, E.SAL_LEVEL "EMPLOYEE의 SAL_LEVEL"
, S.SAL_LEVEL "SAL_GRADE의 SAL_LEVEL"
FROM EMPLOYEE E
, SAL_GRADE S
WHERE SALARY BETWEEN MIN_SAL AND MAX_SAL;
반응형
SELF JOIN
같은 테이블을 조인하는 경우. 자기 자신과 조인을 맺는 것
(1) ANSI 표준
SELECT
E1.EMP_ID
, E1.EMP_NAME 사원이름
, E1.DEPT_CODE
, E1.MANAGER_ID
, E2.EMP_NAME 관리자이름
FROM EMPLOYEE E1
JOIN EMPLOYEE E2 ON(E1.MANAGER_ID = E2.EMP_ID);
(2)오라클 전용
SELECT
E1.EMP_ID
, E1.EMP_NAME 사원이름
, E1.DEPT_CODE
, E1.MANAGER_ID
, E2.EMP_NAME 관리자이름
FROM EMPLOYEE E1
, EMPLOYEE E2
WHERE E1.MANAGER_ID = E2.EMP_ID;
다중 JOIN
N개의 테이블을 조회할 때 사용
ANSI 표준 작성 시 조인 순서를 고려해야함.
ORACLE 전용을 테이블명 서술 순서와 관계가 없음
(1)ANSI 표준
SELECT
EMP_ID
, EMP_NAME
, DEPT_CODE
, DEPT_TITLE
, LOCAL_NAME
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE);
(2)ORACLE 전용
SELECT
EMP_ID
, EMP_NAME
, DEPT_CODE
, DEPT_TITLE
, LOCAL_NAME
FROM EMPLOYEE
, DEPARTMENT
, LOCATION
WHERE DEPT_CODE = DEPT_ID
AND LOCATION_ID = LOCAL_CODE;
반응형
'프로그래밍 > SQL_Oracle' 카테고리의 다른 글
06_OracleDB SQL : DDL(CREATE TALBE) 및 제약조건_테이블만들기 (0) | 2022.07.20 |
---|---|
05_OracleDB SQL : SUBQUERY(서브쿼리) (0) | 2022.07.20 |
03_OracleDB SQL : GROUP BY와 HAVING, 집계함수, 집합연산 (0) | 2022.07.19 |
02_OracleDB SQL : 그룹함수과 단일행 함수 ( SUM, AVG, MAX, MIN, COUNT) (0) | 2022.07.18 |
01_OracleDB SQL : SESECT 기본문법 및 연산자 (0) | 2022.07.18 |