SQL

[SQL] JOIN (CROSS, INNER, OUTER, SELF)

Bay Im 2024. 3. 22. 11:28
  • 조인 (Join)
    • 두 개의 테이블을 연결하여 데이터를 검색하는 방법
    • 서로 다른 테이블에 저장된 관련된 데이터를 가져와서 하나의 결과로 표시 (하나의 테이블)
  • ANSI SQL 조인 방식
    • FROM 절에서 두 테이블명 사이에 조인 종류에 따라 CROSS, INNER, OUTER 중 선택하고 JOIN 키워드 같이 입력
    • 조인에 대한 조건은 ON절에 저장하고 나머지 조건은 WHERE절에 작성
    • CROSS, INNER, OUTER 키워드는 생략도 가능
    • 형태
      • SELECT *
        FROM 테이블A
        [CROSS|INNER|OUTER] JOIN 테이블B
        ON 조인조건
        WHERE 기타조건;
  • Non-ANSI SQL 조인 방식
    • FROM절에 테이블을 쉼표로 구분하여 작성
    • 조인조건과 기타조건을 구분하지 않고 모두 WHERE 절에 작성
    • 형태
      • SELECT *
        FROM 테이블A, 테이블B
        WHERE 조인조건과 기타조건;
  • ERD (Entity Relationship Diagram)
    • 테이블 간의 관계를 설명해주는 다이어그램
    • 데이터베이스의 구조와 관계를 한눈에 파악 가능
  • 조인의 종류
    • Cross Join
      • 한쪽 테이블의 각 행마다 다른쪽 테이블의 모든 행이 각각 한번씩 매칭되는 조인
      • 카티션 곱(Cartesian Product)라고도 부른다.
      • 크로스 조인 결과 행의 개수는 테이블A 행의 개수*테이블B 행의 개수
      • 형태
        • SELECT *
          FROM 테이블A
          [CROSS] JOIN 테이블B
          WHERE 기타조건;
    • Inner Join (내부 조인)
      • 각 테이블에서 조인조건에 일치하는 데이터만 가져오는 조인
      • Equi Join과 Non-Equi Join
        • Equi Join
          • 조인조건에 = 연산자 사용
        • Non-Equi Join
          • 조인조건에 = 연산지 외에 비교 연산자 사용
      • 다중 조인
        • JOIN - ON 아래에 또다시 JOIN - ON
      • 형태
        • SELECT *
          FROM 테이블A
          [INNER] JOIN 테이블B
          ON 조인조건
          WHERE 기타조건;
      • 예시
        • SELECT 사원번호, 직위, 사원.`부서번호`, 부서명
          FROM 사원
          INNER JOIN 부서
          ON 사원.`부서번호` = 부서.`부서번호`
          WHERE 이름 = '이소미';
    • LEFT/RIGHT Outer Join (외부 조인)
      • 조건에 맞지 않은 행도 함께 출력할 수 있다.
      • 두 테이블에서 한쪽은 데이터가 있고 한쪽에는 없을 경우 데이터가 있는 쪽을 기준으로 데이터 출력
      • 테이블명 사이에 LEFT나 RIGHT를 넣어서 OUTER JOIN (OUTER은 생략 가능)
      • 형태
        • SELECT *
          FROM 테이블A
          LEFT|RIGHT [OUTER] JOIN 테이블B
          ON 조인조건
          WHERE 기타조건;
      • LEFT JOIN
        • 왼쪽에 있는 테이블을 기준으로 오르쪽 테이블의 데이터를 매칭
        • 매칭데이터 없을 시 NULL 표시
      • RIGHT JOIN
        • 오른쪽에 있는 테이블을 기준으로 왼쪽 테이블의 데이터를 매칭
        • 매칭데이터 없을 시 NULL 표시
      • FULL OUTER JOIN
        • LEFT OUTER JOIN에 RIGHT OUTER JOIN을 합한 형태
        • 두 OUTER JOIN 중간에 UNION 연산자 사용
    • SELF JOIN
      • 동일한 테이블 내에서 한 컬럼이 다른 컬럼을 참조하는 조인
      • 조인 조건에 동일한 테이블명을 두번 작성하여 조인한다. 이때 테이블명을 다른 별명으로 지정하여 다른 테이블인 것처럼 사용해야 한다.
      • 컬럼명도 다 똑같기 때문에 테이블의 별명.컬럼명 형태로 구분해야 한다.