JOIN

김찬희·2023년 3월 21일
0

KH정보교육원

목록 보기
19/27

▶ JOIN

하나 이상의 테이블에서 데이터를 조회하기 위해 사용하고 수행 결과는 하나의 Result Set으로 나옴

✓ 오라클 전용 구문

  • FROM절에 ‘,’로 구분하여 합치게 될 테이블 명을 기술하고 WHERE절에 합치기에 사용할 컬럼 명 명시
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID;

* 연결에 사용할 두 컬럼 명이 다른 경우 그 자체로 사용 가능

  • FROM절에 ‘,’로 구분하여 합치게 될 테이블 명을 기술하고 WHERE절에 합치기에 사용할 컬럼 명 명시
SELECT EMP_ID, EMP_NAME, EMPLOYEE.JOB_CODE, JOB_NAME
FROM EMPLOYEE, JOB
WHERE EMPLOYEE.JOB_CODE = JOB.JOB_CODE;

* 연결에 사용할 두 컬럼 명이 같은 경우 테이블 명.컬럼 명으로 작성하여 구분

SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME
FROM EMPLOYEE E, JOB J
WHERE E.JOB_CODE = J.JOB_CODE;

* FROM절에 사용한 테이블 별칭 이용 가능

✓ ANSI 표준 구문

  • 연결에 사용하려는 컬럼 명이 같은 경우 USING() 사용, 다른 경우 ON() 사용
SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME
FROM EMPLOYEE
JOIN JOB USING(JOB_CODE);
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);

▶ INNER JOIN과 OUTER JOIN

기본적으로 JOIN은 INNER JOIN이며 두 개 이상의 테이블을 조인할 때 일치하는 값이 없는 행은 조인에서 제외됨
OUTER JOIN은 일치하지 않은 값도 포함이 되며 반드시 OUTER JOIN 명시

✓ 예시

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT
ON (DEPT_CODE = DEPT_ID);

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT
ON (DEPT_CODE = DEPT_ID);

✓ OUTER JOIN 종류
1. LEFT OUTER JOIN
: 합치기에 사용한 두 테이블 중 왼쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN할 때
2. RIGHT OUTER JOIN
: 합치기에 사용한 두 테이블 중 오른쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN할 때
3. FULL OUTER JOIN
: 합치기에 사용한 두 테이블이 가진 모든 행을 결과에 포함시킬 때

✓ 예시

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
RIGHT JOIN DEPARTMENT
ON (DEPT_CODE = DEPT_ID);

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
FULL JOIN DEPARTMENT
ON (DEPT_CODE = DEPT_ID);

✓ 오라클 전용 OUTER JOIN

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE(+) = DEPT_ID;

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE(+) = DEPT_ID(+);

* 에러, (+)는 한 쪽에만 사용 가능

▶ CROSS JOIN

카테시안 곱(Cartesian Product)라고도 하며 조인되는 테이블의 각 행들이 모두 매핑된 데이터가 검색되는 조인 방법
검색되는 데이터 수는 ‘행의 컬럼 수 * 또 다른 행의 컬럼 수‘로 나옴

✓ 예시

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
CROSS JOIN DEPARTMENT;

▶ NON_EQU JOIN

지정한 컬럼 값이 일치하는 경우가 아닌 값의 범위에 포함되는 행들을 연결하는 방식

✓ 예시

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

▶ SELF JOIN

두 개 이상의 서로 다른 테이블을 연결하는 것이 아닌 같은 테이블을 조인하는 것

✓ 예시

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;

▶ 다중 JOIN

하나 이상의 테이블에서 데이터를 조회하기 위해 사용하고 수행 결과는 하나의 Result Set으로 나옴

✓ 예시

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);
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE, LOCAL_NAME
FROM EMPLOYEE
JOIN LOCATION ON (LOCATION_ID = LOCAL_CODE)
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);

* 에러, 다중 조인의 경우 조인 순서 매우 중요

profile
김찬희입니다.

0개의 댓글