데이터베이스에서의 JOIN이란?

KIMA·2022년 7월 14일
0

DB

목록 보기
2/6
post-thumbnail

JOIN이란?

: 2개 이상의 테이블을 특정 조건하에 결합하여 하나의 새로운 테이블을 반환

  • 관계형 데이터베이스(Star Schema)의 특성상 정규화 과정을 거치게 되면 여러 개의 테이블로 분리되므로, join 을 많이 사용

JOIN의 종류

Source : https://theartofpostgresql.com/blog/2019-09-sql-joins/

1. Inner JOIN

: 2개의 테이블을 특정 조건하에 하나로 결합하되, 조건에 만족하는 튜플만 반환

  • Equi JOIN
    • JOIN 조건 : 테이블1.속성 = 테이블2.속성

      -- JOIN 조건 표기법 1: JOIN ~ ON 절 사용
      SELECT {테이블명.}[속성명], ...
      FROM [테이블1] JOIN [테이블2] 
      ON [테이블1].[속성명] = [테이블2].[속성명], ...
      WHERE [조건];
      -- JOIN 조건 표기법 2: Where절 사용
      SELECT {테이블명.}[속성명], ...
      FROM [테이블1], [테이블2]
      WHERE [테이블1].[속성명] = [테이블2].[속성명], ...;
      -- JOIN 조건 표기법 3 : JOIN ~ USING 절 사용
      SELECT {테이블명.}[속성명], ...
      FROM [테이블1] JOIN [테이블2] 
      USING (공통속성);
      💡 CROSS JOIN
      : 조인하는 두 테이블에 있는 튜플들의 순서쌍을 결과로 반환
      
      ❕ 반환되는 행 수 = 테이블 1의 행 수 X 테이블 2의 행 수    
      ❕ Syntax : SELECT field, ... FROM table1 CROSS JOIN table2;
      ❕ Inner JOIN에서 조건이 없는 경우도 CROSS JOIN에 해당됨
      💡 동일한 테이블을 alias를 달리해서 자기 자신과 조인한다면, SELF JOIN
  • Non Equi JOIN : 테이블1.속성 >, <, <>, , 테이블2.속성
    SELECT {테이블명.}[속성명], ...
    FROM [테이블명1], [테이블명2]
    WHERE [테이블1].[속성명] [ > | < | <> | >= | <= ] [테이블2].[속성명], ...;
  • Natural JOIN: 이름과 도메인이 같은 속성을 기준으로 자동으로 JOIN
    SELECT {테이블명.}[속성명], ...
    FROM [테이블1] NATURAL JOIN [테이블2];

2. Outer Join

: 2개의 테이블을 특정 조건하에 하나로 결합하되, 조건에 만족하지 않는 튜플도 결과로 반환

  • Left Outer JOIN (= Left JOIN)
    • 왼쪽 테이블의 모든 튜플들을 리턴함
      - 왼쪽 테이블의 튜플들 중 오른쪽 테이블의 튜플과 조건이 맞지 않는 튜플이 있다면, 오른쪽 테이블의 값들을 NULL로 채우고 리턴함
      -- JOIN 조건 표기법 1 : JOIN ~ ON절 사용
      SELECT {테이블명.}[속성명], ...
      FROM [테이블1] LEFT OUTER JOIN [테이블2]
      ON [테이블1][속성명] = [테이블2][속성명];
      -- JOIN 조건 표기법 2 : Where절 사용
      SELECT {테이블명.}[속성명], ...
      FROM [테이블1], [테이블2]
      WHERE [테이블1][속성명] = [테이블2][속성명](+);
  • Right Outer JOIN (= Right JOIN)
    • 오른쪽 테이블의 모든 튜플들을 리턴함
      - 오른쪽 테이블의 튜플들 중 왼쪽 테이블의 튜플과 조건이 맞지 않는 튜플이 있다면, 왼쪽 테이블의 값들을 NULL로 채우고 리턴함

      -- JOIN 조건 표기법 1 : JOIN ~ ON절 사용
      SELECT {테이블명.}[속성명], ...
      FROM [테이블1] RIGHT OUTER JOIN [테이블2]
      ON [테이블1][속성명] = [테이블2][속성명];
      -- JOIN 조건 표기법 2 : Where절 사용
      SELECT {테이블명.}[속성명], ...
      FROM [테이블1], [테이블2]
      WHERE [테이블1][속성명](+) = [테이블2][속성명];
  • Full Outer Join (= FULL JOIN) : LEFT OUTER JOIN UNION | UNION ALL RIGHT OUTER JOIN
    • MySQL은 FULL JOIN을 지원하지 않는다.

      SELECT {테이블명.}[속성명], ...
      FROM [테이블1] FULL OUTER JOIN [테이블2]
      ON [테이블1][속성명] = [테이블2][속성명];
profile
안녕하세요.

0개의 댓글