Join


title: 2025-11-19 (날짜) author: 강병호 (이름) date: 2025-11-19 (날짜) category: TIL/강병호/2025/11 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —

두 개 이상의 테이블을 조건으로 연결하여 하나의 결과를 생성하는 연산입니다. 주로 두 테이블에 공통으로 존재하는 컬럼을 기준으로 연결합니다.

SELECT *
FROM Orders o
JOIN Customers c ON o.customer_id = c.id;

위와 같이 Orders 테이블과 Custormers 테이블을 order의 customer_id 와 customer 의 id 를 연결하여 주문 + 그 주문의 고객 정보 를 함께 보고 싶은 경우에 사용한다.

  • Inner Join : 내부 조인이라 불리며 두 테이블을 연결 시 가장 많이 사용한다.

      SELECT < 목록>
      FROM < 번째 테이블>
          INNER JOIN < 번째 테이블>
          ON <조인 조건>
      [WHERE 검색 조건]
    

    image.png

  • Outer Join : 외부 조인으로 한쪽에만 데이터가 있어도 결과가 나오는 것
    • FULL : 왼쪽 외부 조인과 오른쪽 외부 조인의 합
    • RIGHT : 오른쪽 테이블의 모든 값 출력
    • LEFT : 왼쪽 테이블의 모든 값 출력
      SELECT < 목록>
      FROM < 번째 테이블(LEFT 테이블)>
          <LEFT | RIGHT | FULL> OUTER JOIN < 번째 테이블(RIGHT 테이블)>
           ON <조인 조건>
      [WHERE 검색 조건]
    

    image.png

  • Cross Join : 상호 조인으로 한 쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인 시키는 기능이다. 카티션 곱이라 불리기도 하며 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수 이다.

      SELECT *
      FROM < 번째 테이블>
          CROSS JOIN < 번째 테이블>
    

    image.png

  • Self Join : 자체 조인으로 자기 자신과 조인한다. 본인 테이블로 조인을 수행하면 된다.

      SELECT < 목록>
      FROM <테이블> 별칭A
          INNER JOIN <테이블> 별칭B
      [WHERE 검색 조건]
    

    image.png

  • SEMI JOIN : 왼쪽 테이블의 행 중 오른쪽 테이블에서 최소한 하나 이상 일치하는 행이 있을 때 왼쪽 테이블의 행 반환. 주로, 오른쪽 테이블에 존재하는 데이터인지 확인하는

      SELECT < 목록>
      FROM <테이블> 별칭A
      [WHERE EXISTS (
          SELECT 1
          FROM 테이블 별칭B
          WHERE 검색조건
      )];
    
  • ANTI JOIN : SEMI와 반대로 일치하는 행이 전혀 없. 는 경우에 왼쪽 테이블의 행 반환

      SELECT
          <열목록>
      FROM
          <테이블>
      [WHERE
          <열목록> NOT IN (
              SELECT <열목록>
              FROM <테이블>
      )];
    

results matching ""

    No results matching ""