DataBase

[SQLD] JOIN

DH_0518 2025. 3. 2. 23:58

 

 

JOIN

 

 

 

JOIN

  • 여러 테이블의 데이터를 동시에 출력하거나 참조할 때 사용하는 방법으로, 여러 테이블의 데이터를 결합하여 하나의 조합 결과로 만드는 기능이다
  • 일반적으로 'PK'나 'FK'의 연관에 의해 JOIN이 성립된다
    • 단, 'PK'나 'FK' 관계가 없더라도 '논리적인 값들의 연관'만으로도 JOIN이 성립되기도 한다
  • JOIN 할 테이블이 여러 개더라도, 데이터 처리 과정에서는 한 번에 최대 2개만 JOIN 된다
    • ex) FROM A, B, C -> A JOIN B가 먼저 실행되고, 그 결과에 C가 JOIN 됨
  • N개의 테이블 조인 시, 최소 N-1개의 조인 조건이 필요하다
  • Standard Join은 [INNER, CROSS, NATURAL, OUTER] 이다
  • 순수 관계 연산자는 [SELECT, PROJECT, JOIN, DIVIDE] 이다
    • SELECT 연산 -> WHERE 절로 구현 (행을 반환)
    • PROJECT 연산 -> SELECT 절로 구현 (열을 반환)
    • JOIN 연산 -> 다양한 JOIN 기능으로 구현
    • DIVIDE 연산 -> 현재 사용 x

 

 

 

JOIN의 종류

  • '조건의 형태'에 따른 구분
    1. EQUI JOIN (등가 JOIN)
      • 조인 조건이 동등(=) 조건인 경우
      • ORACLE -> 조건을 WHERE 절에
      • ANSI / ISO SQL -> 조건을 ON 절에
    2. NON EQUI JOIN (비등가 JOIN)
      • 조인 조건이 동등(=) 조건이 아닌 경우
      • 즉, =가 아닌 [BETWEEN, <, <=, ...] 등의 연산자를 사용하여 조인을 수행하는 것
      • 대부분 비등가 JOIN을 수행할 수 있으나, 상황에 따라 설계상의 이유로 불가능할 수 있음
  • '조인 결과'에 따른 구분
    1. INNER JOIN
      • 두 테이블간 '조인 조건이 일치'하는 데이터만 반환
      • ORACLE에서 기본적으로 사용되는 JOIN이다
      • ANSI 표준에서는 USING이나 ON 조건절이 필수이다
    2. OUTER JOIN
      • 두 테이블간 '조인 조건이 일치하지 않는 데이터도' 반환
      • INNER JOIN과 대비되는 조인 방식이다
      • JOIN 조건을 만족하는 값이 없는 행도 반환하고 싶을 때 사용한다
      • '기준이 되는 테이블'의 방향에 따라 [LEFT, RIGHT, FULL OUTER] JOIN으로 분류한다
      • ORACLE에서는 메인 테이블이 아닌 JOIN 대상 테이블의 컬럼에 '(+)' 를 사용해서 OUTER JOIN을 진행할 수 있다
        ex)
        FROM 메인테이블 A, 조인테이블 B
        WHERE A.field = B.field (+)
        -> 메인이 A, 대상이 B이므로 LEFT JOIN과 동일 
      • 'OUTER'는 생략할 수 있다
        ex) LEFT OUTER JOIN = LEFT JOIN
    3. NATURAL JOIN
      • 두 테이블에서 '같은 이름을 가진 모든 컬럼'에 대해 EQUI JOIN을 수행한다
      • JOIN에 사용되는 컬럼들의 [이름, 데이터 타입, 데이터 도메인]이 같아야 한다
      • USING, ON, WHERE 절에서 JOIN 조건을 정의할 수 없다
      • SQL Server에서는 지원되지 않는다
      • alias를 사용할 수 없다
      • 중복된 컬럼 중 하나만 결과에 포함한다
      • NULL은 포함하지 않는다
    4. CROSS JOIN
      • 두 테이블의 '모든 조합을 생성'하는 조인이다 (Cartesian Product 반환)
      • 따라서 '조인하는 두 테이블 데이터의 곱' 만큼 데이터 조합이 발생한다 (N*M, N과 M은 각 테이블의 row 수)
      • ORACLE -> FROM절에 두 테이블을 선언한 후, WHERE 절에 조건을 명시하지 않을 시 발생
      • ANSI -> CROSS JOIN을 명시적으로 사용
    5. SELF JOIN
      • 같은 테이블을 두 번 이상 참조하는 조인
      • FROM 절에 동일 테이블을 두 번 이상 선언해야 하므로, 식별을 위해 반드시 alias를 사용해야 한다

 

 

 

OUTER JOIN 종류 (LEFT, RIGHT, FULL OUTER)

  • LEFT OUTER JOIN
    • '왼쪽 테이블을 기준'으로 오른쪽 테이블이 더해지는 형태
    • 즉, '왼쪽 테이블의 모든 행 데이터'가 반환된다
    • 오른쪽 테이블은, 데이터 조합 중 '왼쪽 테이블의 결과값에 일치하는 행'만 반환한다
    • 오른쪽 테이블에서 조건을 만족하는 값이 없으면, 해당 부분은 NULL로 채워진다 
  • RIGHT OUTER JOIN
    • '오른쪽 테이블을 기준'으로 왼쪽 테이블이 더해지는 형태
    • LEFT JOIN과 반대
  • FULL OUTER JOIN
    • 두 테이블의 '모든 데이터'가 결합되는 형태로, 두 테이블이 가지고 있는 모든 행이 반환된다
    • 조건에 일치하지 않는 경우, 해당 부분은 NULL로 채워진다
    • ORACLE에서는 지원하지 않지만, UNION을 통해 구현이 가능하다
      ex) (LEFT JOIN 결과) UNION (RIGHT JOIN 결과)

 

 

 

 

JOIN의 조건절

  • ON 조건절
    • JOIN 조건에 사용될 양 테이블의 컬럼명이 달라도 사용 가능
    • 같은 컬럼명을 조건에 사용해야 한다면, 테이블 출저를 명확하게 해야한다
  • USING 조건절
    • JOIN 조건에 사용될 양 테이블의 컬럼명이 '같을' 경우 사용 가능
    • alias(별칭), 출처 테이블 명시 불가능
    • USING 절의 기준 컬럼은 식별자를 가질 수 없다
    • [SELECT * FROM USING] 시에는, 출력되는 값의 첫 번째 컬럼이 USING 조건절의 기준 컬럼이다
    • SQL Server에서는 지원되지 않는다
    • 괄호를 필수적으로 해주어야 한다
      ex) USING (field)

 

 

 

 

 

 

 

 

 

 

 

 

 

Reference

 

[SQLD] 2024년 개정 SQLD 합격 후기, SQLD 개정판 개념정리 pdf 공유

[ 목차 ]1. SQLD 시험• 정보• 유의사항• 시험 후기2. 공부 방법• 교재 및 강의• 추천 강의 및 자료#. 개념정리 PDF 공유 SQLD 합격을 하게 되어, 준비하는 분들에게 조금이나마 도움이 될까해서

bruders.tistory.com