ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] INNER JOIN과 OUTER JOIN에 대해서 알아보자!
    데이터베이스 2022. 8. 5. 11:26

    조인이란?

    조인(JOIN)이란 두 개 이상의 테이블으 서로 묶어서 하나의 결과 집합(테이블)을 만들어 내는 것을 말합니다.

     

    1. 내부조인(INNER JOIN)

    1-1. 내부조인(Inner Join)

    INNER JOIN은 조인 중에서 가장 많이 사용되는 조인입니다. 보통 JOIN이라하면 INNER JOIN을 지칭하는 것입니다.

     

    INNER JOIN조건을 사용하여 두 테이블의 레코드를 결합합니다.

     

     

    예제 테이블)

    각 아이가 하나의 장난감만을 가지고 있다. 일대일 관계이며 toy_id가 참조키

    boys   toys
    boy_id boy toy_id toy_id toy
    1 Davey 3 1 hula hoop
    2 Bobby 5 2 balsa gilder
    3 Beaver 2 3 toy soldiers
    4 Richie 1 4 harmonica
      5 baseball cards

     

    쿼리)

    SELECT boys.boy, toys.toy FROM boys INNER JOIN toys ON boys.toy_id = toys.toy_id

    boys 테이블의 참조키와 toys 테이블의 기본키를 짝지어서 조인을 수행하였습니다.

    INNER JOIN 키워드로 조인을 수행하며 ON 키워드로 조건을 걸어줍니다. ON 키워드는 WHERE로 대체가 가능합니다.

     

     

    쿼리 실행 결과)

    boy toy
    Richie hula hoop
    Beaver balsa glider
    Davey toy soldiers
    Bobby baseball cards

     

     

     

    1-2. 카티젼 조인(크로스 조인)

    우선 내부조인의 한 형태인 카디젼 조인에 대해서 알아보겠습니다.

     

    카티젼 조인(크로스 조인) 한 테이블의 모든 행 다른 테이블의 모든 행을 짝지워 반환합니다.

     

     

    예제 테이블)

    toys   boys
    toy_id toy boy_id boy
    1 hula hoop 1 Davey
    2 balsa glider 2 Bobby
    3 toy soldirs 3 Beaver
    4 harmonica 4 Richie
    5 baseball  

     

    쿼리)

    SELECT t.toy, b.boy FROM toys AS t CROSS JOIN boys AS b;

    CROSS JOIN 키워드로 조인을 수행합니다.

     

     

    쿼리 실행 결과)

    toy boy
    hula hoop Davey
    hula hoop Bobby
    hula hoop Beaver
    hula hoop Richie
    balsa glider Davey
    balsa glider Bobby
    balsa glider Beaver
    balsa glider Richie
    toy soldirs Davey
    toy soldirs Bobby
    ... ...

    이 조인은 결과가 20개 나옵니다. 5개의 장난감 X 4명의 아이가 가능한 모든 조합입니다.

     

     

    내부조인(Inner Join)은 쿼리의 조건에 따라 일부 결과 열이 제거된 크로스 조인입니다.

     

     

     


     

     

    2. 외부조인(OUTER JOIN)

    외부조인(OUTER JOIN)은 조인의 조건에 만족되지 않는 행까지도 포함시키는 조인입니다.

     

    2-1. 왼쪽 외부 조인(LEFT OUTER JOIN)

    LEFT OUTER JOIN

    은 왼쪽 테이블의 모든 행을 가져다 오른쪽 테이블의 행과 비교합니다.

     

    비교문이 참인지 거짓인지 상관없이 왼쪽 테이블의 모든 것은 출력이 됩니다.

    LEFT OUTER JOIN의 의미를 '왼쪽 테이블의 것은 모두 출력되어야 한다' 정도로 이해하면 기억하기 쉬울 것입니다.

     

    LEFT OUTER JOIN에서는 FROM 뒤에 그리고 JOIN 전에 나오는 테이블이 왼쪽 테이블이고 JOIN 앞에 나오는

    테이블이 오른쪽 테이블 입니다.

     

     

    예제 테이블)

    girls   toys
    girl_id girl toy_id toy_id toy
    1 Jane 3 1 hula hoop
    2 Sally 4 2 balsa glider
    3 CIndy 1 3 toy soldiers
      4 harmonica
    5 baseball cards
    6 tinker toys
    7 etch-a-sketch
    8 slinky

     

    쿼리)

    SELECT g.girl, t.toy FROM girls g LEFT OUTER JOIN toys t ON g.toy_id = t.toy_id;

    LEFT OUTER JOIN은 왼쪽 테이블(girls 테이블)의 모든 행을 가져다 오른쪽 테이블(toys 테이블) 의 행과 비교하는 조인입니다.

    FROM 앞에 있는 girls가 왼쪽 테이블입니다. 그리고 JOIN 앞에 있는 toys가 오른쪽 테이블이죠.

     

     

    쿼리 실행 결과)

    girl toy
    Cindy hula hoop
    Jane toy soldiers
    Sally harmonica

    결과만 놓고보면 Inner Join과 차이가 없는 것 처럼 보입니다!

     

     

     

     

    내부조인 (Inner Join)과 무엇이 다른건가....

    OUTER JOIN은 다른 테이블과 일치하는 것이 있는가에 상관없이 행을 반환한다는 차이가 있습니다.

    그리고 일치하는 것이 없을 경우 NULL값으로 표시합니다.

    grils 테이블과 toys 테이블의 경우, 결과가 NULL이라면 특정 장난감이 어느 girl 에게도 속하지 않는다는 것입니다.

     

     

    왼쪽 외부 조인의 결과가 NULL값이면 오른쪽 테이블에 왼쪽 테이블에 상응하는 값이 없다는 의미입니다.

     

    쿼리)

    SELECT g.girl, t.toy FROM toys t LEFT OUTER JOIN girls g ON g.toy_id = t.toy_id;

    이번에는 toys 테이블이 왼쪽 테이블이고 girls 테이블이 오른쪽 테이블입니다!

    이런 경우에는 결과가 어떻게 나올까요.

     

     

    쿼리 실행 결과)

    girl toy
    Cindy hula hoop
    NULL balsa glider
    Jane toy soldiers
    Sally harmonica
    NULL baseball cards
    NULL tinker toys
    NULL etch-a-sketch
    NULL slinky

    일치하는 것이 없어도 테이블에 결과가 나옵니다. 값은 NULL값으로 나옵니다.

     

     

     

    2-2. 오른쪽 외부 조인(RIGHT OUTER JOIN)

    right outer join오른쪽 테이블을 왼쪽 테이블과 비교한다는 점을 제외하면 왼쪽 외부 조인과 같습니다.

     

    아래 두 쿼리는 동일한 결과가 나옵니다.

     

     

    쿼리)

    SELECT g.girl, t.toy FROM girls g LEFT OUTER JOIN toys t ON g.toy_id = t.toy_id;
    SELECT g.girl, t.toy FROM toys t RIGHT OUTER JOIN girls g ON g.toy_id = t.toy_id;

     

     

    쿼리 실행 결과)

    girl toy
    Cindy hula hoop
    Jane toy soldiers
    Sally harmonica
Designed by Tistory.