ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오라클 데이터베이스 SQL 35강 -LEFT/RIGHT/FULL / OUTER JOIN
    카테고리 없음 2022. 2. 6. 14:16

    OUTER JOIN

    참조키를 기중으로 일치하지 않는 행도 포함시키는 조인

    MEMBER LEFT/RIGHT/FULL OUTER JOIN NOTICE

    ON MEMBER.ID = NOTICE.WRITER

     

    JOIN의 이해

    OUTER조인이라는 것은 INNER JOIN과 동일하다. 다만 OUTER 조인은 INNER JOIN에다가

    하나의 정보만  더 추가 하면 된다.

    그림1

    두개의 테이블을 JOIN한다고 할 때 두 개의 테이블을 JOIN하는 기본 방법은 INNER JOIN이다. 서로 관계있는 것 끼리만 JOIN하게 하는 것이기 때문에 위 그림에서는 MEMBER 테이블에서는 NEWLEC이라는 행만 NOTICE테이블과 JOIN된다. 즉  NOTICE 게시글을 쓴 사람만 JOIN이 되는 것이다.

    반면에 서로 관계가 없는 데이터들도 있다. 또 자식 테이블인 NOTICE 테이블에 DRAGON이는 WRITER가 쓴 글이 존재하는데 MEMBER 테이블에 DRAGON이라는 ID의 MEMBER가 없는 것은 결함이다. 하지만 부모테이블의 OUTER들은 결함이라고 볼수는 없다. 글을 안쓰는 것이 가능하기 때문이다. 

     

    JOIN 할 때 INNER JOIN이 기본이지만, 거기에 OUTER들이 있을 경우에 OUTER들을 끼워주면, 그 것이 OUTER INNER JOIN 즉 OUTER JOIN이 된다. 위 두개의 테이블이 JOIN할 경우에는 왼쪽 테이블에는 3개 오른쪽 테이블에는 2개가 존재한다. 그래서 1)왼쪽에 있는 OUTER를 JOIN할 때 포함해 주겠다. 그러면 LEFT OUTER JOIN이 된다. 2)오른쪽에 있는 OUTER를 포함해 주겠다고 하면, RIGHT OUTER JOIN이 된다. 그리고 3)양쪽에 모든 OUTER들을 JOIN 시키겠다고 하면, FULL OUTER JOIN이라고 한다.

     

    INNER JOIN

    SELECT * FROM NOTICE N JOIN MEMBER M ON N.WRITER_ID = M.ID;

     

    LEFT OUTER JOIN

    이때 왼쪽은 부모 자식 관계가 아니고, 쿼리문에서 쓸때의 왼쪽을 뜻 한다.

    아래 쿼리문에서는  MEMBER가 왼쪽에 있다.

    SELECT *FROM MEMBER M LEFT OUTER JOIN NOTICE N ON M.ID=N.WRITER_ID;

    그림2 

    그림1에서 LEFT OUTER JOIN 하겠 다고 하면, 오른쪽 테이블에서 관계 없는 행 즉 OUTER 행들은 다 사라진다. 그런데 LEFT에 있는 OUTER들은 포함 하는 것이다. 그래서 포함한 상태에서 왼쪽 테이블과 오른쪽 테이블의 관계를 통해서, 왼쪽에 작성자 행이 NEWLEC 3개 필요하니까 3개행을 복사한다. 그리고 합쳐진다.

    그림3

    왼쪽에 OUTER와 매칭 될 수 있는 레코드를 NULL 값을 채워서 포함 시킨다. 이렇게 되는게 OUTER JOIN이다. 왼쪽 테이블에 있는 OUTER JOIN을 포함시키는 과정을 보면, 결국은 INNER JOIN에 다가 왼쪽 테이블의 OUTER JOIN 개수 만큼 결과 행이 늘어나는 것이다.

     

     

    [출처-https://youtu.be/2LqOTMeQZmQ]

    댓글

Designed by Tistory.