Skip to main content

조인


LEFT OUTER JOIN (왼쪽 외부 조인)

  • LEFT OUTER JOIN (또는 LEFT JOIN):
    • 왼쪽(먼저 명시된) 테이블의 모든 행을 결과에 포함.
    • 오른쪽 테이블에서는 조인 조건에 일치하는 행의 데이터를 가져옴.
    • 오른쪽 테이블에 일치하는 데이터가 없으면 해당 컬럼들은 NULL 값으로 표시.
  • 문법:
SELECT table1.column1, table2.column1
FROM table1 -- 왼쪽 테이블
LEFT OUTER JOIN table2 ON table1.join_column = table2.join_column; -- 오른쪽 테이블
  • OUTER 키워드는 생략 가능.
  • 예시: 모든 TB_COMPANY_MASTER (기업정보)를 조회하되, 각 기업의 TB_LOAN_ACCOUNT (여신정보)가 있다면 함께 표시 (여신이 없는 기업도 결과에 포함, 여신 관련 컬럼은 NULL).
SELECT
c.COMPANY_NM AS "회사명",
l.LOAN_ACCT_NO AS "여신계좌번호",
l.LOAN_AMT AS "여신금액"
FROM
TB_COMPANY_MASTER c
LEFT JOIN
TB_LOAN_ACCOUNT l ON c.BIZ_REG_NO = l.BIZ_REG_NO
ORDER BY
c.COMPANY_NM;

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

  • RIGHT OUTER JOIN (또는 RIGHT JOIN):
    • 오른쪽(두 번째 명시된) 테이블의 모든 행을 결과에 포함.
    • 왼쪽 테이블에서는 조인 조건에 일치하는 행의 데이터를 가져옴.
    • 왼쪽 테이블에 일치하는 데이터가 없으면 해당 컬럼들은 NULL 값으로 표시.
  • 문법:
SELECT table1.column1, table2.column1
FROM table1 -- 왼쪽 테이블
RIGHT OUTER JOIN table2 ON table1.join_column = table2.join_column; -- 오른쪽 테이블
  • OUTER 키워드는 생략 가능.
  • 예시: 모든 TB_LOAN_ACCOUNT (여신정보)를 조회하되, 각 여신에 해당하는 TB_COMPANY_MASTER (기업정보)를 함께 표시 (매칭되는 기업 정보가 없는 여신이 있다면(데이터 이상), 기업 관련 컬럼은 NULL).
  • (일반적으로 LEFT JOIN을 더 선호하며, 테이블 순서를 바꿔 LEFT JOIN으로 표현 가능)
SELECT
c.COMPANY_NM AS "회사명",
l.LOAN_ACCT_NO AS "여신계좌번호",
l.LOAN_AMT AS "여신금액"
FROM
TB_COMPANY_MASTER c
RIGHT JOIN
TB_LOAN_ACCOUNT l ON c.BIZ_REG_NO = l.BIZ_REG_NO
ORDER BY
l.LOAN_ACCT_NO;

FULL OUTER JOIN (완전 외부 조인)

  • FULL OUTER JOIN (또는 FULL JOIN):
    • 양쪽 테이블의 모든 행을 결과에 포함.
    • 조인 조건에 일치하는 데이터가 있으면 해당 값을, 없으면 NULL 값으로 표시.
    • 즉, 왼쪽 테이블에는 있지만 오른쪽에는 없는 행, 오른쪽 테이블에는 있지만 왼쪽에는 없는 행, 양쪽 모두에 있는 행을 모두 보여줌.
  • 문법:
SELECT table1.column1, table2.column1
FROM table1
FULL OUTER JOIN table2 ON table1.join_column = table2.join_column;
  • OUTER 키워드는 생략 가능.
  • 예시: TB_COMPANY_MASTERTB_LOAN_ACCOUNT 간의 관계에서, 기업 정보만 있거나, 여신 정보만 있거나, 둘 다 있는 모든 경우를 조회.
SELECT
c.COMPANY_NM AS "회사명",
l.LOAN_ACCT_NO AS "여신계좌번호"
FROM
TB_COMPANY_MASTER c
FULL JOIN
TB_LOAN_ACCOUNT l ON c.BIZ_REG_NO = l.BIZ_REG_NO
ORDER BY
c.COMPANY_NM, l.LOAN_ACCT_NO;
  • 활용: 두 데이터셋 간의 불일치 항목을 찾거나, 양쪽 데이터를 모두 유지하면서 비교 분석할 때 유용.

조인(JOIN)과 집합 연산자(SET Operators) 비교

  • 목표의 차이:
    • 조인 (JOIN): 여러 테이블의 컬럼들을 옆으로 합쳐서 연관된 데이터를 하나의 행으로 만듦. (데이터를 '넓게' 확장)
    • 집합 연산자 (SET Operators: UNION, UNION ALL, INTERSECT, MINUS): 두 개 이상의 SELECT 문의 행들을 위아래로 합치거나 비교. (데이터를 '길게' 확장하거나 비교)
  • 사용 시점:
    • 조인: 서로 다른 정보를 가진 테이블들에서 관련 있는 데이터를 연결하여 한 번에 보고 싶을 때.
      • 예: 기업명(기업테이블)과 그 기업의 매출액(재무테이블)을 함께 조회.
    • 집합 연산자: 유사한 구조의 데이터셋을 합치거나, 두 데이터셋 간의 공통/차이점을 찾고 싶을 때.
      • 예: 서울 지점 고객 목록과 부산 지점 고객 목록을 합쳐 전체 고객 목록 생성 (UNION ALL).
      • 예: 작년 우수 고객 목록과 올해 우수 고객 목록에서 변동 없는 고객 찾기 (INTERSECT).
  • 컬럼 처리:
    • 조인: 결과에 양쪽 테이블의 컬럼들이 모두 (또는 선택적으로) 포함될 수 있음.
    • 집합 연산자: 참여하는 SELECT 문의 컬럼 개수와 데이터 타입이 일치해야 하며, 결과 컬럼은 첫 번째 SELECT문을 따름.

퀴즈