티스토리 뷰

728x90
반응형

목차

     

    Join

     

    Join은 간단히 말하면 필요에 의한 두 개 이상의 테이블 간 결합이다.

     

    여기서 필요란 당연하다면 당연하게도 사용자의 필요, 따라서 개발자의 필요를 가리킨다.

     

    따라서 Join은 필요와 목표에 의한 새로운 테이블을 (임시로) 생성하며,

     

    데이터를 손쉽게 조회할 수 있도록 도와준다.

     

    계속해서 테이블의 결합방식에 따른 Join의 종류를 알아보자.

     

    Inner Join

     

    Inner Join은 교집합에 해당한다.

     

    두 테이블의 공통된 요소만 가져와 테이블을 구성하기 때문이다.

     

    우선 다이어그램을 보면 아래와 같이 생겼다.

     

    계속해서 간단한 두 개의 테이블로 예를 들어보자.

    각 테이블에서 서로 연관된 내용만 뽑아 테이블을 생성한 것을 확인할 수 있다.

     

    계속에서 SQL 표현식을 살펴보면, 아래와 같은 두 가지 방식(명시적, 암시적)으로 지정하는 것을 알 수 있다.

     

    SELECT * FROM 
    NAME INNER JOIN MAJOR
    ON NAME.ID = MAJOR.ID
    SELECT * FROM 
    NAME, MAJOR
    WHERE NAME.ID = MAJOR.ID

    추가로 위와 같이 equal 연산자(=)를 이용하는 조인을 동등 조인(EQUI JOIN)이라고 한다.

     

    Outer Join

     

    Outer Join은 조건에 맞지 않아도 특정 테이블의 모든 행을 전부 포함하는 테이블을 작성하는 방식이다.

     

    Left Outer Join

     

    Left Outer Join은 크게 두 종류로 나뉜다.

     

    왼쪽 테이블의 내용을 전부 가져오되 공통 부분을 포함하는 테이블을 작성하는 방법과

     

    공통부분을 제외하고 작성하는 방법. 이 방법은 차집합과 같다. 우선 테이블로 보면 아래와 같다.

     

    계속해서 각각을 SQL 쿼리문으로 작성해 보자.

    SELECT * FROM
    NAME LEFT OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID
    SELECT * FROM
    NAME LEFT OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID
    WHERE MAJOR.ID IS NULL

     

    Right Outer Join

     

    다음으로는 Right Outer Join이다.

     

    Left Outer Join에서 방향만 뒤집혔을 뿐 별 다를 것은 없다.

     

    SELECT * FROM
    NAME RIGHT OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID
    SELECT * FROM
    NAME LEFT OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID
    WHERE NAME.ID IS NULL

     

    Full Outer Join

     

    마지막으로 Full Outer Join이다. 합집합에 해당하는 이 조인은 조건과 상관없이

     

    대상 테이블의 모든 데이터를 가져와 테이블을 만든다.

     

    SELECT * FROM 
    NAME FULL OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID;
    SELECT * FROM 
    NAME FULL OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID
    WHERE NAME.ID IS NULL OR MAJOR.ID IS NULL

    MySQL의 경우는 Full Outer Join을 지원하지 않기 때문에 아래와 같이 두 조인을 섞어서 쓴다고 한다.

    SELECT * FROM 
    NAME LEFT OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID
    
    UNION
    
    SELECT * FROM 
    NAME RIGHT OUTER JOIN MAJOR
    ON NAME.ID = MAJOR.ID;

    이외에도 특별한 상황에서 쓰이는 Self Join, Cross Join 등이 있다.

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/11   »
    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
    글 보관함