2-1-5. 조인

박은서's avatar
Feb 25, 2026
2-1-5. 조인

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