조인 (JOIN)

DONI·2021년 9월 29일
0

Oracle

목록 보기
3/22
post-thumbnail

🏹 JOIN 작성 방법

  • ANSI 표준 구문
    : 연결에 사용하려는 컬럼 명이 같은 경우 USING( ), 다른 경우 ON( ) 사용

  • 오라클 전용 구문
    : FROM절에 ‘ , ’로 구분하여 합치게 될 테이블명을 기술하고,
      WHERE절에 합치기에 사용할 컬럼명을 명시


🏹 INNER JOIN (내부 조인)

두 개 이상의 테이블을 조인할 때 일치하는 값이 없는 행은 조인에서 제외
기본적으로 JOIN은 INNER JOIN !

  • 연결에 사용할 두 컬럼명이 다른 경우 : ON( )
    📍 ANSI
       SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE FROM EMPLOYEE
       JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
    📍 오라클
       SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
       FROM EMPLOYEE, DEPARTMENT
       WHERE DEPT_CODE = DEPT_ID;

  • 연결에 사용할 두 컬럼명이 같은 경우 : USING( )
    📍 ANSI
       SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME FROM EMPLOYEE
       JOIN JOB USING (JOB_CODE);
    📍 오라클 ← 별칭 사용
       SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME
       FROM EMPLOYEE E, JOB J
       WHERE E.JOB_CODE = J.JOB_CODE;


🏹 OUTER JOIN (외부 조인)

두 개 이상의 테이블을 조인할 때 일치하지 않은 값도 포함
  💥 FULL OUTER JOIN 오라클 구문 사용 불가

  • LEFT [OUTER] JOIN
    📍 ANSI
       SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE
       LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
    📍 오라클
       SELECT EMP_NAME, DEPT_TITLE
       FROM EMPLOYEE, DEPARTMENT
       WHERE DEPT_CODE = DEPT_ID(+);

🏹 NON EQUAL JOIN (비등가 조인)

지정한 컬럼 값이 일치하는 경우가 아닌 값의 범위에 포함되는 행들을 연결
SELECT EMP_NAME, E.SAL_LEVEL, SALARY, MIN_SAL, MAX_SAL
FROM EMPLOYEE E JOIN SAL_GRADE S ON (SALARY BETWEEN MIN_SAL AND MAX_SAL);


🏹 SELF JOIN (자체 조인)

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

    📍 ANSI
      SELECT E1.EMP_ID, E1.EMP_NAME, NVL(E2.EMP_NAME, '없음') 직속상사
      FROM EMPLOYEE E1 LEFT JOIN EMPLOYEE E2 ON (E1.MANAGER_ID = E2.EMP_ID);
   📍 오라클
      SELECT E1.EMP_ID, E1.EMP_NAME, NVL(E2.EMP_NAME, '없음') 직속상사
      FROM EMPLOYEE E1, EMPLOYEE E2
      WHERE E1.MANAGER_ID = E2.EMP_ID(+);


🏹 NATURAL JOIN (자연 조인)

동일한 타입과 이름을 가진 컬럼이 있는 테이블 간의 조인을 간단하게 표현
반드시 두 테이블 간의 동일한 컬럼명, 타입을 가진 컬럼 필요
SELECT EMP_ID 사번, EMP_NAME 이름, JOB_CODE 직급코드, JOB_NAME 직급명 FROM EMPLOYEE
NATURAL JOIN JOB;


🏹 다중 조인

N개의 테이블을 조회할 때 사용 ⭐ 반드시 순서대로 작성 !

    📍 ANSI
      SELECT EMP_ID, EMP_NAME, JOB_NAME, DEPT_TITLE FROM EMPLOYEE
      JOIN JOB USING (JOB_CODE)
      JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
   📍 오라클 ← AND 연산 이용
      SELECT EMP_ID, EMP_NAME, JOB_NAME, DEPT_TITLE
      FROM EMPLOYEE E, JOB J, DEPARTMENT
      WHERE E.JOB_CODE = J.JOB_CODE
      AND DEPT_CODE = DEPT_ID;

profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글