inblog logo
|
DailyCoding
    SQLD

    2-1-5. 조인

    박은서's avatar
    박은서
    Feb 25, 2026
    2-1-5. 조인
    Contents
    1. JOIN 개요1️⃣ JOIN 기초 개념2️⃣ JOIN은 반드시 식별자 관계만 가능한가?3️⃣ JOIN의 종류2. EQUI JOIN(등가 조인)과 Non EQUI JOIN(비등가 조인)1️⃣ EQUI JOIN의 기초 개념2️⃣ Non EQUI JOIN의 기초 개념3️⃣ EQUI JOIN과 Non EQUI JOIN3. 3개 이상의 TABLE JOIN1️⃣ 3개 이상의 TABLE JOIN2️⃣ 3개 이상의 TABLE JOIN 예4. NATURAL JOIN1️⃣ NATURAL JOIN 기초 개념2️⃣ 공통된 칼럼명이 여러 개인 경우의 NATURAL JOIN3️⃣ NATURAL JOIN 예5. USING 조건절1️⃣ USING 조건절 기초 개념2️⃣ USING 조건절 예3️⃣ ON 조건절과 USING 조건절의 차이6. CROSS JOIN1️⃣ CROSS JOIN 기초 개념2️⃣ CROSS JOIN 예

    1. JOIN 개요

    1️⃣ JOIN 기초 개념

    1) JOIN

    • 데이터를 서로 연결해서 볼 수 있는 방법
    • 데이터를 연결해 주는 연결고리(식별자)를 통해 두 가지 다른 정보를 한데 모아 볼 수 있음

    2) 문법

    SELECT 별칭1.칼럼명, 별칭2.칼럼명 FROM 테이블1 AS 별칭1 JOIN 테이블2 AS 별칭2 ON 별칭1.칼럼명 = 별칭2.칼럼명;
    ※ 주의 - AS 별칭 사용 시 AS 없이 바로 별칭이 나올 수도 있고, 별칭 없이 테이블명이 바로 나올 수도 있음

    2️⃣ JOIN은 반드시 식별자 관계만 가능한가?

    • 그렇지는 않음!
    • 일반적으로 주식별자(PK)나 보조식별자(FK) 값의 연관에 의해 조인 이루어짐
    • 하지만 식별자 관계없이 논리적인 값들의 연관만으로도 JOIN 이루어질 수 있음
      • 데이터의 정합성과 의미를 신중히 고려해야 함

    3️⃣ JOIN의 종류

    • STUDENT 테이블
      • ID
        NAME
        DEPTNO
        ENROLL_DATE
        GRADE
        1
        John
        10
        2023-01-01
        90
        2
        Jane
        20
        2022-02-01
        85
        3
        Jim
        10
        2023-03-01
        88
        4
        Jake
        30
        2023-04-01
        92
        5
        Jill
        NULL
        2023-05-01
        75
    • DEPARTMENT 테이블
      • DEPTNO
        DNEME
        10
        Computer Science
        20
        Mathematics
        30
        Physics
        40
        Chemistry

    1) INNER JOIN

    • 두 테이블 간의 공통된 값을 가진 행만 반환
    • INNER 생략 가능 (INNER JOIN = JOIN)
    SELECT S.ID, S.NAME, D.DNAME FROM STUDENT S INNER JOIN DEPARTMENT D ON S.DEPTNO = D.DEPTNO;
    ID
    NAME
    DNAME
    1
    John
    Computer Science
    2
    Jane
    Mathematics
    3
    Jim
    Computer Science
    4
    Jake
    Physics

    2) LEFT OUTER JOIN

    • 왼쪽 테이블의 모든 행과 오른쪽 테이블의 공통된 값을 가진 행을 반환
    • 오른쪽 테이블에 일치하는 값이 없으면 NULL로 표시
    • OUTER 생략 가능 (LEFT OUTER JOIN = LEFT JOIN)
    SELECT S.ID, S.NAME, D.DNAME FROM STUDENT S LEFT OUTER JOIN DEPARTMENT D ON S.DEPTNO = D.DEPTNO;
    ID
    NAME
    DNAME
    1
    John
    Computer Science
    2
    Jane
    Mathematics
    3
    Jim
    Computer Science
    4
    Jake
    Physics
    5
    Jill
    NULL
    • (오라클) WHERE 조건에서 (+) 기호를 기준이 되는 반대쪽 칼럼에 붙이면 LEFT OUTER JOIN과 같은 결과
      • LEFT OUTER JOIN, (+) 두 문법 모두 사용 가능
      • SELECT S.ID, S.NAME, D.DNAME FROM STUDENT S, DEPARTMENT D WHERE S.DEPTNO = D.DEPTNO(+);
        ID
        NAME
        DNAME
        1
        John
        Computer Science
        2
        Jane
        Mathematics
        3
        Jim
        Computer Science
        4
        Jake
        Physics
        5
        Jill
        NULL

    3) RIGHT OUTER JOIN

    • 오른쪽 테이블의 모든 행과 왼쪽 테이블의 공통된 값을 가진 행을 반환
    • 왼쪽 테이블에 일치하는 값이 없으면 NULL로 표기
    • OUTER 생략 가능 (RIGHT OUTER JOIN = RIGHT JOIN)
    SELECT S.ID, S.NAME, D.DNAME FROM STUDENT S RIGHT OUTER JOIN DEPARTMENT D ON S.DEPTNO = D.DEPTNO;
    ID
    NAME
    DNAME
    1
    John
    Computer Science
    2
    Jane
    Mathematics
    3
    Jim
    Computer Science
    4
    Jake
    Physics
    NULL
    NULL
    Chemitry
    • (오라클) WHERE 조건에서 (+) 기호를 기준이 되는 반대쪽 칼럼에 붙이면 RIGHT OUTER JOIN과 같은 결과
      • RIGHT OUTER JOIN, (+) 두 문법 모두 사용 가능
      • SELECT S.ID, S.NAME, D.DNAME FROM STUDENT S, DEPARTMENT D WHERE S.DEPTNO(+) = D.DEPTNO;
        ID
        NAME
        DNAME
        1
        John
        Computer Science
        2
        Jane
        Mathematics
        3
        Jim
        Computer Science
        4
        Jake
        Physics
        NULL
        NULL
        Chemitry

    4) FULL OUTER JOIN

    • 두 테이블의 모든 행을 반환
    • 공통된 값이 없는 경우에도 각각의 테이블에서 행을 반환하고 NULL로 표시
    • OUTER 생략 가능 (FULL OUTER JOIN = FULL JOIN)
    SELECT S.ID, S.NAME, D.DNAME FROM STUDENT S FULL OUTER JOIN DEPARTMENT D ON S.DEPTNO = D.DEPTNO;
    ID
    NAME
    DNAME
    1
    John
    Computer Science
    2
    Jane
    Mathematics
    3
    Jim
    Computer Science
    4
    Jake
    Physics
    5
    Jill
    NULL
    NULL
    NULL
    Chemitry

    5) UNION

    • JOIN의 종류는 아니지만, 두 테이블을 결합할 때 자주 사용
    • 두 쿼리의 결과 집합을 합치되, 중복된 행이 있다면 중복 행을 제거하고 유일한 하나의 행만 출력
    • 중복된 행을 모두 표시하고 싶을 때는 UNION ALL 사용
    SELECT ID, NAME, DEPTNO FROM STUDENT UNION SELECT DEPTNO AS ID, DNAME AS NAME, NULL AS DEPTNO FROM DEPARTMENT;
    ID
    NAME
    DEPTNO
    1
    John
    10
    2
    Jane
    20
    3
    Jim
    10
    4
    Jake
    30
    5
    Jill
    NULL
    10
    Computer Science
    NULL
    20
    Mathematics
    NULL
    30
    Physics
    NULL
    40
    Chemitry
    NULL
    • 주의사항
      • 각 쿼리의 칼럼 개수와 데이터 유형이 동일해야 함
      • 각 칼럼의 이름이 동일할 필요는 없지만 의미상으로는 일치해야 함

    ※ FULL OUTER JOIN vs UNION vs UNION ALL

    항목
    FULL OUTER JOIN
    UNION
    UNION ALL
    데이터 결합 방식
    두 테이블의 모든 행 결합
    두 쿼리의 결과 집합 합침
    두 쿼리의 결과 집합 합침
    중복 처리
    중복된 행 포함
    중복된 행 제거
    중복된 행 포함
    NULL 처리
    어느 한쪽에만 존재하는 행은 NULL로 채움
    중복된 행은 한 번만 포함
    각 쿼리의 결과에 포함된 NULL 값 그대로 유지
    사용 목적
    두 테이블 간의 모든 데이터 결합
    여러 쿼리의 결과를 하나로 결합
    여러 쿼리의 결과를 중복 포함하여 하나로 결합

    2. EQUI JOIN(등가 조인)과 Non EQUI JOIN(비등가 조인)

    1️⃣ EQUI JOIN의 기초 개념

    1) EQUI JOIN

    • 두 테이블을 특정 열의 값이 동일한 행을 기준으로 결합하는 조인 방식
    • ON절에서 두 열의 값이 같은지 확인하는 조건 사용
    • 가장 일반적인 형태의 조인 중 하나
    • INNER JOIN과 동일한 방식으로 작동
    • SQL에서 등가 조인은 일반적으로 = 연산자를 사용해 수행

    2) 문법

    SELECT A.열1, B.열2 FROM 테이블A AS A JOIN 테이블B AS B ON A.공통열 = B.공통열;

    2️⃣ Non EQUI JOIN의 기초 개념

    1) Non EQUI JOIN

    • 두 테이블을 결합할 때 = 연산자가 아닌 다른 비교 연산자(>, <, >=, <=, !=, 등)를 사용하는 조인 방식
    • 두 테이블 간의 관계가 단순히 동일한 값이 아니라, 범위나 다른 조건에 따라 결합되어야 할 때 사용

    2) 문법

    SELECT A.*, B.* FROM 테이블A AS A JOIN 테이블B AS B ON A.비교열 연산자 B.비교열;

    3️⃣ EQUI JOIN과 Non EQUI JOIN

    • NEW_STUDENT 테이블
      • ID
        NAME
        SCORE
        1
        John
        85
        2
        Jane
        92
        3
        Jim
        78
        4
        Jake
        89
        5
        Mike
        90
        6
        Anna
        80
    • NEW_DEPARTMENT 테이블
      • DEPT_ID
        MIN_SCORE
        MAX_SCORE
        GRADE
        1
        90
        100
        A
        2
        80
        89
        B
        3
        70
        79
        C

    1) EQUI JOIN

    SELECT S.ID, S.NAME, S.SCORE, D.DEPT_ID, D.GRADE FROM NEW_STUDENT S JOIN NEW_DEPARTMENT D ON S.SCORE = D.MIN_SCORE;
    ID
    NAME
    SCORE
    DEPT_ID
    GRADE
    5
    Mike
    90
    1
    A
    6
    Anna
    80
    2
    B

    2) Non EQUI JOIN

    SELECT S.ID, S.NAME, S.SCORE, D.DEPT_ID, D.GRADE FROM NEW_STUDENT S JOIN NEW_DEPARTMENT D ON S.SCORE BETWEEN D.MIN_SCORE AND D.MAX_SCORE;
    ID
    NAME
    SCORE
    DEPT_ID
    GRADE
    3
    Jim
    78
    3
    C
    6
    Anna
    80
    2
    B
    1
    John
    85
    2
    B
    4
    Jake
    89
    2
    B
    5
    Mike
    90
    1
    A
    2
    Jane
    92
    1
    A

    3. 3개 이상의 TABLE JOIN

    1️⃣ 3개 이상의 TABLE JOIN

    • 두 개의 테이블을 조인하는 방식과 동일하게, 각 테이블 간의 관계를 정의하여 연결
    • 각 조인의 결과를 다음 조인에 사용하는 방식으로 여러 테이블을 연속적으로 조인

    2️⃣ 3개 이상의 TABLE JOIN 예

    SELECT O.ORDER_ID, O.ORDER_DATE, E.FIRST_NAME, E.LAST_NAME, C.NAME, C.ADDRESS FROM ORDERS O JOIN EMPLOYEES E ON O.SALESMAN_ID = E.EMPLOYEE_ID JOIN CUSTOMERS C ON O.CUSTOMER_ID = C.CUSTOMER_ID;

    4. NATURAL JOIN

    1️⃣ NATURAL JOIN 기초 개념

    1) NATURAL JOIN

    • 두 테이블 간의 공통 열을 자동으로 사용하여 조인을 수행하는 SQL 조인 방식
    • 조인 조건을 명시적으로 지정할 필요 없음 (두 테이블에 동일한 이름을 가진 모든 열이 조인 조건으로 사용됨)
    SELECT * FROM 테이블A NATURAL JOIN 테이블B
    • 공통된 칼럼명이 하나일 때 사용하는 것이 좋음

    2️⃣ 공통된 칼럼명이 여러 개인 경우의 NATURAL JOIN

    • 오류 발생하거나, 결과값이 없거나, 예상치 못한 방식으로 조인되어 결과 테이터가 이상하게 나올 수 있음

    3️⃣ NATURAL JOIN 예

    SELECT * FROM EMP NATURAL JOIN DEPT;
    ➡️ 공통 칼럼이 한 번만 나옴

    5. USING 조건절

    1️⃣ USING 조건절 기초 개념

    1) USING 조건절

    • SQL에서 조인을 수행할 때 두 테이블 간의 공통 칼럼을 명시적으로 지정하는 방법

    2) 문법

    SELECT * FROM 테이블A JOIN 테이블B USING(공통 칼럼);

    2️⃣ USING 조건절 예

    SELECT * FROM EMP A JOIN DEPT B USING(DEPTNO);

    3️⃣ ON 조건절과 USING 조건절의 차이

    구분
    ON
    USING
    조건 표현
    자유로운 조건식 가능
    동일한 컬럼명만 지정
    컬럼명 요구
    달라도 됨
    양쪽 테이블 컬럼명이 반드시 동일
    결과 컬럼
    컬럼 중복 유지
    조인 컬럼 하나로 합쳐짐
    표현력
    매우 유연
    제한적이지만 간결

    6. CROSS JOIN

    1️⃣ CROSS JOIN 기초 개념

    1) CROSS JOIN

    • 두 테이블 간의 모든 행을 조합하여 결과 집합을 만드는 조인 방식
    • 두 테이블의 카테시안 곱(Cartesian product)을 생성
    • 조인 조건이 없으며, 모든 가능한 행의 조합이 결과 집합에 포함됨

    2) 문법

    SELECT * FROM 테이블A CROSS JOIN 테이블B;

    2️⃣ CROSS JOIN 예

    1) 교재 예시

    SELECT * FROM EMP CROSS JOIN DEPT;

    2) 간단한 예시

    • 테이블 A (색상)
      • color
        Red
        Blue
    • 테이블 B (사이즈)
      • size
        S
        M
        L
    • CROSS JOIN 쿼리
      • SELECT * FROM A CROSS JOIN B;
    • 결과 (카테시안 곱)
      • color
        size
        Red
        S
        Red
        M
        Red
        L
        Blue
        S
        Blue
        M
        Blue
        L
     
    Share article
    Contents
    1. JOIN 개요1️⃣ JOIN 기초 개념2️⃣ JOIN은 반드시 식별자 관계만 가능한가?3️⃣ JOIN의 종류2. EQUI JOIN(등가 조인)과 Non EQUI JOIN(비등가 조인)1️⃣ EQUI JOIN의 기초 개념2️⃣ Non EQUI JOIN의 기초 개념3️⃣ EQUI JOIN과 Non EQUI JOIN3. 3개 이상의 TABLE JOIN1️⃣ 3개 이상의 TABLE JOIN2️⃣ 3개 이상의 TABLE JOIN 예4. NATURAL JOIN1️⃣ NATURAL JOIN 기초 개념2️⃣ 공통된 칼럼명이 여러 개인 경우의 NATURAL JOIN3️⃣ NATURAL JOIN 예5. USING 조건절1️⃣ USING 조건절 기초 개념2️⃣ USING 조건절 예3️⃣ ON 조건절과 USING 조건절의 차이6. CROSS JOIN1️⃣ CROSS JOIN 기초 개념2️⃣ CROSS JOIN 예

    DailyCoding

    RSS·Powered by Inblog