ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - JOIN
    데이터베이스/Oracle 2020. 11. 12. 14:47
    728x90
    반응형

    JOIN

    JOIN이란 하나 이상의 테이블에서 데이터를 조회하기 위해 사용하고 수행 결과하나의 Result Set으로 나타낸다.

    JOIN에는 오라클 전용 구문ANSI 표준 구문이 있다.

     

     

    예를들어

    EMPLOYEE 테이블 조회

    SELECT EMP_ID, EMP_NAME, DEPT_CODE
    FROM EMPLOYEE;

    DEPARTMENT 테이블 조회

    SELECT DEPT_ID, DEPT_TITLE
    FROM DEPARTMENT;

    EMPLOYEE 테이블과 DEPARTMENT 테이블을 JOIN을 하면 

    SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
    FROM EMPLOYEE, DEPARTMENT -- 합치게될 테이블 명시
    WHERE DEPT_CODE = DEPT_ID; -- 합치게될 컬럼명 명시

     

    왼쪽 EMPLOYEE 테이블의 DEPT_CODE오른쪽 DEPARTMENT 테이블의 DEPT_ID의 매칭되어

    DEPT_TITLE을 옆에 합쳐 조회한다.

     

    이제 JOIN오라클 전용 구문ANSI 구문을 사용하여 합쳐보자.

     

     

    오라클 전용 구문

    오라클 전용구문이란 FROM절에 ‘,’로 구분하여 합치게 될 테이블 명을 기술하고

    WHERE절합치기에 사용할 컬럼명을 명시한다.

     

    [ 오라클 전용 구문 예시 ] 

    SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
    FROM EMPLOYEE, DEPARTMENT
    WHERE DEPT_CODE = DEPT_ID;

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

     

    테이블 명.컬럼 명으로 작성하여 구분하는 예시

    SELECT EMP_ID, EMP_NAME, EMPLOYEE.JOB_CODE, JOB_NAME
    FROM EMPLOYEE, JOB
    WHERE EMPLOYEE.JOB_CODE = JOB.JOB_CODE; -- 테이블명.컬럼명

     

    FROM절에 사용한 테이블 별칭을 이용하는 구문 예시

    SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME
    FROM EMPLOYEE E, JOB J -- 별칭사용
    WHERE E.JOB_CODE = J.JOB_CODE;

    둘 SQL문이 같은 결과를 나타낸다.

     

     

    ANSI 표준 구문

    ANSI 표준 구문이란 연결에 사용하려는 컬럼 명이 같은 경우 USING() 사용하고

    다른 경우 ON() 사용한다.

     

    [ ANSI 표준 구문 예시 ]

    USING을 사용하는 예시

    SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME
    FROM EMPLOYEE
    JOIN JOB USING(JOB_CODE); -- USING을 사용한다.

     

    ON을 사용하는 예시

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

     

     

    INNER JOIN과 OUTER JOIN

    ININER JOIN과 OUTER JOIN 이란 기본적으로 JOININNER JOIN이며 두 개 이상의 테이블을 조인할 때 일치하는 값이 없는 행은 조인에서 제외된다.

    OUTER JOIN일치하지 않은 값도 포함이 되며 반드시 OUTER JOIN을 명시해야한다.

     

     

    INNER JOIN

    INNER JOIN내부조인 혹은 등가조인이라고 불린다.

    연결된 컬럼의 값일치하는 행들만 조인이 이루어지고 컬럼값이 일치하지 않는 행조인에서 제외된다.

     

    마치 교집합처럼 이루어져 있다.

     

    [ INNER JOIN 예시 ]

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

     

     

     

     

    OUTER JOIN

    OUTER JOIN이란 외부조인 혹은 포괄조인이라고 불린다.

    두테이블의 지정한 컬럼값이 일치하지 않는 행도 조인에 포함 시킨다.

     

    OUTER JOIN 에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN세가지가 있다.

     

     

    LEFT OUTER JOIN

    LEFT OUTER JOIN이란 두 테이블 중 왼쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN할 때 사용한다.

    또한 NULL값을 제외하지 않는다. 즉, NULL값을 포함한다.

     

    LEFT OUTER JOIN은 이러한 모양으로 이루어져있다.

     

    [ LEFT 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(+); -- 왼쪽(DEPT_CODE)를 기준으로 하여 오른쪽(DEPT_ID)를 맞춰서 추가

     

     

    RIGHT OUTER JOIN

    RIGHT OUTER JOIN이란 두 테이블 중 오른쪽에 기술된 테이블컬럼 수를 기준으로 JOIN할 때 사용한다.

    또한 NULL값을 제외하지 않는다. 즉, NULL값을 포함한다.

     

    RIGHT OUTER JOIN 이러한 모양으로 이루어져있다.

     

    [ RIGHT OUTER JOIN 예시 ]

    ANSI 표준 구문 예시

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

     

    오라클 표준 구문 예시

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

     

     

    FULL OUTER JOIN

    FULL OUTER JOIN이란 두 테이블이 가진 모든 행을 결과에 포함시킬 때 사용한다.

    LEFTOUTER JOIN RIGHTOUTERJOIN 를 합친것이다.

    오라클 전용 구문에서는 FULL OUTER JOIN이 안된다.

     

    FULL OUTER JOIN 이러한 모양으로 이루어져있다.

     

    FULL OUTER JOIN 예시 ]

    SELECT EMP_NAME, DEPT_TITLE
    FROM EMPLOYEE
    FULL /*OUTER*/ JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID); -- OUTER는 생략이 가능!

     

    728x90
    반응형
Designed by Tistory.