티스토리 뷰

반응형




SQL JOIN 

  • SQL 에서는 두 개 이상의 테이블의 데이터를 동시에 보는 방법으로 조인 이라는 기능을 사용합니다. 조인이라는 단어가 연결하다, 합쳐지다 등 의 뜻을 가지고 있는데, 단어 의미처럼 테이블을 연결하는 기능입니다.


  • 두 개의 테이블을 연결하는 방법은 위의 표처럼 총 7가지의 경우가 있을 수 있습니다. 단순한 교집합, 합집합 부터 차집합 등 여러 집합을 구현할 수 있습니다.


예제로 사용할 테이블 : EMP, DEPT 

  • 오라클을 설치하면 기본적으로 생성되는 EMP 테이블과 DEPT 테이블을 이용해서 예제를 진행해보겠습니다. Outer 조인들의 결과를 더 잘 살피기 위해 다음과 같은 쿼리를 실행해 EMP 테이블과 DEPT 테이블 간 연결되지 않는 데이터들을 추가해보겠습니다.

INSERT INTO DEPT VALUES(50, 'MARKETING', 'SEOUL');
INSERT INTO EMP VALUES(7999, 'JASON', 'MARKETER', 7782, 
TO_DATE('88/09/12','YY/MM/DD'), 5000, 0 , 60);

  • DEPT 에는 부서번호 50번 , 마케팅부서, 서울 지역 행을 하나 삽입했습니다.

  • EMP 에는 위와 같은 정보의 JASON 이라는 사원을 부서번호 60번으로 삽입했습니다.

  • SELECT * FROM EMP;   # EMP 테이블 입니다.


  • SELECT * FROM DEPT;   # DEPT 테이블 입니다.


  • EMP 테이블 중 JASON 은 부서번호가 60번인데 DEPT 테이블에 60번 부서가 없다는 점 과 DEPT 테이블에는 40번, 50번 부서가 있지만 EMP 테이블에는 해당 부서의 직원들이 없다는 점을 인지하고 계셔야 여러 조인들의 결과를 더 쉽게 이해하실 수 있습니다.


INNER, FULL, OUTER EXCLUDING JOIN  

  • Inner 조인, Full 조인, Outer Excluding 조인 이 3가지 조인 부터 살펴보도록 하겠습니다. 당연하겠지만 이 중 가장 많이 사용하는 조인은 이너 조인입니다. Full 조인은 양쪽의 모든 데이터를 조회하여 살펴보기 위해 종종 사용하며, Outer Excluding 조인 같은 경우도 양 테이블에서 서로 연결되지 않은 데이터들만 조회하고자 할 때 사용할 수 있습니다.


  • INNER JOIN


SELECT *

    FROM EMP A JOIN DEPT B

    ON A.DEPTNO = B.DEPTNO;


  • 가장 일반적으로 사용하며 사용할 곳이 매우 많은 조인방법입니다. 두 테이블을 엮어줄 수 있는 키인 DEPTNO ( 부서번호 ) 를 기반으로 행들을 연결해 줍니다. 결과를 보면 알 수 있듯이 서로 DEPTNO 가 맞지 않다면 조회되지 않습니다.


  • FULL JOIN


SELECT *

    FROM EMP A FULL JOIN DEPT B

    ON A.DEPTNO = B.DEPTNO;


  • FULL JOIN 은 모든 결과를 보여주는 조인방법입니다. 결과 테이블을 보면 위의 INNER 조인과 다른 점을 볼 수 있습니다. 위에선 없던 JASON 직원과 40번 50번 부서가 있는 것을 확인할 수 있습니다.


  • OUTER EXCLUDING JOIN


SELECT *

    FROM EMP A FULL JOIN DEPT B

    ON A.DEPTNO = B.DEPTNO

    WHERE A.DEPTNO IS NULL 

           OR B.DEPTNO IS NULL;


  • OUTER EXCLUDING JOIN 은 두 테이블간 서로 연결되지 않는 행들만 조회할 수 있는 조인방법입니다. 부서가 DEPT 테이블에 없는 JASON 직원과 직원이 하나도 없는 부서들만 출력된 결과입니다.



LEFT, RIGHT OUTER JOIN 

  • Outer 조인은 두 테이블간 연결이 되는 자료들을 모두 출력한 것에 추가로 한 쪽 테이블에만 있는 데이터들을 출력하는 조인입니다.


  • LEFT OUTER JOIN


SELECT *

    FROM EMP A LEFT JOIN DEPT B

    ON A.DEPTNO = B.DEPTNO;


  • LEFT OUTER JOIN 에는 JASON 직원이 출력되는 것을 알 수 있습니다. OUTER EXCLUDING JOIN 에서 DEPT 부분을 제외한 것이라고 생각할 수 있겠습니다. 

  • 참고로 LEFT 는 FROM EMP LEFT JOIN DEPT 중 좌측 EMP 를 칭하는 것입니다. 만약 FROM DEPT LEFT JOIN EMP 라고 작성한다면 DEPT 가 좌측이 되는 것입니다.


  • RIGHT OUTER JOIN


SELECT *

    FROM EMP A RIGHT JOIN DEPT B

    ON A.DEPTNO = B.DEPTNO;


  • LEFT OUTER JOIN 에서 출력되던 JASON 직원이 없어지고 DEPTNO 40, 50의 행이 출력되는 것을 알 수 있습니다.



LEFT, RIGHT EXCLUDING JOIN 



  • EXCLUDING JOIN 은 두 테이블 중 한쪽에만 있는 데이터들을 출력하는 조인방법 입니다. 다시말해 OUTER EXCLUDING JOIN 에서 한 쪽 테이블 씩만 출력되는 것이죠.


  • LEFT EXCLUDING JOIN


SELECT *

    FROM EMP A LEFT JOIN DEPT B

    ON A.DEPTNO = B.DEPTNO

    WHERE B.DEPTNO IS NULL;


  • LEFT EXCLUDING JOIN 의 쿼리를 보면 LEFT JOIN 쿼리에 추가로 DEPT 테이블 중 DEPTNO 가 없는 부분을 출력하라는 쿼리만 추가된 것을 알 수 있습니다. 다시 말해 EMP 테이블에만 있는 행을 출력하는 조인 방법입니다.


  • RIGHT EXCLUDING JOIN


SELECT *

    FROM EMP A RIGHT JOIN DEPT B

    ON A.DEPTNO = B.DEPTNO

    WHERE A.DEPTNO IS NULL;


  • RIGHT EXCLUDING JOIN 의 쿼리도 LEFT JOIN 쿼리에 추가로 EMP 테이블 중 DEPTNO 가 없는 부분을 출력하라는 쿼리만 추가된 것을 알 수 있습니다. 다시 말해 DEPT 테이블에만 있는 행을 출력하는 조인 방법입니다.



JOIN 정리 

  • 이상으로 7가지 방법의 두 개의 테이블을 조인하는 방법에 대해 살펴보았습니다. 종류가 많은 것 같지만 실제로 사용하는 것은 몇가지 되지 않습니다. 또한 천천히 살펴보면 그렇게 어려운 쿼리들도 아닙니다. 자신이 원하는 부분을 먼저 생각한 뒤 쿼리를 참조하면 문제없이 갖고자 하는 데이터 셋을 얻을 수 있을것입니다.



추가 : 3개 이상 테이블들의 조인 

  • 데이터들을 조합하며 새로운 결과물들을 얻어나가는 과정에서는 단순히 2개의 테이블만 결합하는 것이 아닌 3개 4개 이상의 테이블들을 결합해야하는 경우들이 있습니다. 3개 이상 테이블들을 조인할 경우에도 2개의 테이블을 조인하는 것과 동일한 방법을 사용합니다.

  • A, B, C 테이블이 K 라는 열을 통해 조인이 된다고 가정하고 작성한 쿼리입니다.

SELECT *
    FROM A 
      LEFT JOIN B
        ON A.K = B.K
      LEFT JOIN C
        ON A.K = C.K

  • 2 개의 테이블을 먼저 조인한 뒤 추가로 3번째 테이블을 조인하면 됩니다. 또한 더 많은 테이블들을 조인하는 경우가 생기더라도 위와 같이 차근차근 하나씩 조인해나가면 됩니다.






반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함