본문 바로가기
자격증/SQLD

[SQLD] 3-3: JOIN (조인)의 모든 것

by rnasterofmysea 2025. 2. 16.
반응형

 

이전 포스트:

2025.02.13 - [자격증/SQLD] - [SQLD] Chapter 3-2 GROUP BY & HAVING & ORDER

 

[SQLD] Chapter 3-2 GROUP BY & HAVING & ORDER

1. GROUP BY 개념GROUP BY 절은 데이터를 특정 기준에 따라 그룹화하여 집계 연산을 수행할 때 사용됩니다. SUM(), AVG(), COUNT(), MAX(), MIN()과 같은 집계 함수(Aggregate Function)와 함께 사용됩니다.1.1 GROUP BY

rnasterofmysea.tistory.com


 

SQLD Chapter 3-3: JOIN (조인)


1. JOIN 개념

JOIN은 두 개 이상의 테이블을 연결하여 데이터를 조회하는 방법입니다. 관계형 데이터베이스에서는 여러 테이블에 데이터를 분산 저장하므로, 조인을 활용하여 데이터를 결합하는 것이 필수적입니다.

1.1 JOIN의 기본 구문

SELECT A.열_이름, B.열_이름
FROM 테이블A A
JOIN 테이블B B ON A.공통_열 = B.공통_열;

1.2 JOIN 종류

 

https://medium.com/@aakriti.sharma18/joins-in-sql-4e2933cedde6

 

 

조인의 종류는 다음과 같이 분류됩니다:

  1. EQUI JOIN: 동등 비교(=) 연산자를 사용하는 조인
  2. NON-EQUI JOIN: 동등 비교가 아닌 조건을 사용하는 조인
  3. TABLE JOIN: 기본적인 테이블 간의 조인
  4. INNER JOIN: 일치하는 행만 반환
  5. OUTER JOIN: 한쪽 테이블의 모든 데이터를 포함하는 조인
    • LEFT OUTER JOIN: 왼쪽 테이블의 모든 행 + 일치하는 오른쪽 테이블 행
    • RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행 + 일치하는 왼쪽 테이블 행
    • FULL OUTER JOIN: 양쪽 테이블의 모든 행 반환
  6. 표준 조인 (ANSI JOIN): 표준 SQL 조인 방식

 


2. EQUI JOIN

EQUI JOIN은 = 연산자를 사용하여 테이블을 조인하는 가장 일반적인 방식입니다.

2.1 EQUI JOIN 예제

 

테이블: CUSTOMERS

CUSTOMER_ID  NAME
101 홍길동
102 김철수
103 이영희

 

테이블: ORDERS

ORDER_ID  CUSTOMER_ID  AMOUNT
1 101 500
2 103 1000
3 102 750
SELECT C.CUSTOMER_ID, C.NAME, O.ORDER_ID, O.AMOUNT
FROM CUSTOMERS C, ORDERS O
WHERE C.CUSTOMER_ID = O.CUSTOMER_ID;

 

결과

CUSTOMER_ID  NAME  ORDER_ID  AMOUNT
101 홍길동 1 500
102 김철수 3 750
103 이영희 2 1000

 

 


3. NON-EQUI JOIN

NON-EQUI JOIN은 = 이외의 비교 연산자(<,>,<=,>= 등)를 사용하여 데이터를 조인하는 방식입니다.

 

3.1 NON-EQUI JOIN 예제

 

 

테이블: EMPLOYEES

EMPLOYEE_ID  EMPLOYEE_NAME  SALARY
1 홍길동 3000
2 김철수 4500
3 이영희 6000

 

테이블: SALARY_GRADE

GRADE  MIN_SALARY  MAX_SALARY
A 2000 3999
B 4000 5999
C 6000 7999

 

 

SELECT E.EMPLOYEE_NAME, S.GRADE
FROM EMPLOYEES E
JOIN SALARY_GRADE S ON E.SALARY BETWEEN S.MIN_SALARY AND S.MAX_SALARY;

결과 

EMPLOYEE_NAME  GRADE
홍길동 A
김철수 B
이영희 C

 


4. INNER JOIN

INNER JOIN은 두 테이블 간 공통된 값이 있는 경우에만 해당 데이터를 결합합니다.

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

테이블: EMPLOYEES

EMPLOYEE_ID  EMPLOYEE_NAME  DEPARTMENT_ID
1 홍길동 101
2 김철수 102
3 이영희 101

 

테이블: DEPARTMENTS

DEPARTMENT_ID  DEPARTMENT_NAME
101 영업부
102 인사부

 

SELECT E.EMPLOYEE_NAME, D.DEPARTMENT_NAME
FROM EMPLOYEES E
INNER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;

결과

EMPLOYEE_NAME  DEPARTMENT_NAME
홍길동 영업부
김철수 인사부
이영희 영업부

 


5. OUTER JOIN

OUTER JOIN은 한쪽 테이블에 데이터가 없는 경우에도 모든 데이터를 포함합니다.

 

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

 

테이블: EMPLOYEES

EMPLOYEE_ID  EMPLOYEE_NAME  DEPARTMENT_ID
1 홍길동 101
2 김철수 102
3 이영희 NULL

 

테이블: DEPARTMENTS

DEPARTMENT_ID  DEPARTMENT_NAME
101 영업부
102 인사부

 

5.1 LEFT OUTER JOIN

SELECT E.EMPLOYEE_NAME, D.DEPARTMENT_NAME
FROM EMPLOYEES E
LEFT OUTER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;

결과 

EMPLOYEE_NAME  DEPARTMENT_NAME
홍길동 영업부
김철수 인사부
이영희 NULL

 


5.2 RIGHT OUTER JOIN

SELECT E.EMPLOYEE_NAME, D.DEPARTMENT_NAME
FROM EMPLOYEES E
RIGHT OUTER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;

결과 

EMPLOYEE_NAME  DEPARTMENT_NAME
홍길동 영업부
김철수 인사부
NULL 연구개발부

 


5.3 FULL OUTER JOIN

SELECT E.EMPLOYEE_NAME, D.DEPARTMENT_NAME
FROM EMPLOYEES E
FULL OUTER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;

결과

EMPLOYEE_NAME  DEPARTMENT_NAME
홍길동 영업부
김철수 인사부
이영희 NULL
NULL 연구개발부

 


 

6. CROSS JOIN (교차 조인)

 

CROSS JOIN은 두 테이블의 모든 행을 서로 곱하여 데카르트 곱(Cartesian Product)을 생성하는 조인 방식입니다.
즉, 조건 없이 모든 조합을 반환하며, 조인하는 두 테이블의 각 행이 모든 조합으로 결합됩니다.

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

6.1 CROSS JOIN 기본 구문

SELECT A.열_이름, B.열_이름
FROM 테이블A A
CROSS JOIN 테이블B B;

 

6.2  CROSS JOIN 예제

 

CUSTOMERS 테이블

CUSTOMER_ID  NAME
101 홍길동
102 김철수

 

 

PRODUCTS 테이블

 

PRODUCT_ID PRODUCT_NAME
P1 TV
P2 PHONE

 

 

SELECT C.CUSTOMER_ID, C.NAME, P.PRODUCT_ID, P.PRODUCT_NAME
FROM CUSTOMERS C
CROSS JOIN PRODUCTS P;

결과 (Cartesian Product)

CUSTOMER_ID NAME  PRODUCT_ID  PRODUCT_NAME
101 홍길동 P1 TV
101 홍길동 P2 PHONE
102 김철수 P1 TV
102 김철수 P2 PHONE

 

CROSS JOIN 특징

  • 조인 조건 없이 두 테이블의 모든 행을 조합하여 반환
  • 결과 행 개수 = 첫 번째 테이블 행 개수 × 두 번째 테이블 행 개수
  • 실수로 사용하면 데이터 폭발이 발생할 수 있음

7. NATURAL JOIN (자연 조인)

NATURAL JOIN은 두 테이블에서 같은 이름을 가진 열을 자동으로 매칭하여 조인하는 방식입니다.
즉, ON 또는 USING을 명시적으로 지정하지 않아도 공통된 컬럼을 기준으로 자동 조인합니다.

 

7.1 NATURAL JOIN 기본 구문

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

 

7.2 NATURAL JOIN 예제

 

EMPLOYEES 테이블

EMPLOYEE_ID  NAME  DEPARTMENT_ID
1 홍길동 101
2 김철수 102
3 이영희 101

 

DEPARTMENTS 테이블

DEPARTMENT_ID  DEPARTMENT_NAME
101 영업부
102 인사부
103 개발부

 

 

SELECT * FROM EMPLOYEES
NATURAL JOIN DEPARTMENTS;

결과 

EMPLOYEE_ID  NAME  DEPARTMENT_ID  DEPARTMENT_NAME
1 홍길동 101 영업부
2 김철수 102 인사부
3 이영희 101 영업부

 

NATURAL JOIN 특징

  • 공통된 컬럼을 자동으로 찾아서 조인
  • ON 조건을 명시하지 않아도 됨
  • 동일한 컬럼이 여러 개 존재할 경우, 자동으로 매칭되므로 예기치 않은 오류 발생 가능
  • 조인 기준이 명확하지 않을 경우 예상치 못한 결과가 나올 수 있음

8. SELF JOIN (자기 조인, 자기 결합)

 

8.1. SELF JOIN이란?

SELF JOIN(셀프 조인)은 같은 테이블을 두 번 사용하여 자기 자신과 조인하는 방식입니다.
즉, 같은 테이블 내에서 특정 컬럼을 기준으로 관계를 설정하여 조인하는 것입니다.

 

📌 주요 사용 사례:

  • 조직 구조(부서-상사 관계)
  • 제품과 관련 제품 매칭
  • 친구 관계 조회 (SNS, 커뮤니티)

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

8.2. SELF JOIN 기본 구문

SELECT A.열_이름, B.열_이름
FROM 테이블 A
JOIN 테이블 B ON A.공통_열 = B.공통_열;
  • 같은 테이블을 두 개의 별칭(A, B)으로 나누어 사용
  • 조인 조건을 설정하여 특정 관계만 조인

 

8.3. SELF JOIN 예제

 

8.3.1 조직 내 상사-부하 관계 조회

 

EMPLOYEES 테이블

EMPLOYEE_ID EMPLOYEE_NAME  MANAGER_ID
1 홍길동 NULL
2 김철수 1
3 이영희 1
4 박민수 2
SELECT E1.EMPLOYEE_NAME AS 직원, 
       E2.EMPLOYEE_NAME AS 상사
FROM EMPLOYEES E1
LEFT JOIN EMPLOYEES E2
ON E1.MANAGER_ID = E2.EMPLOYEE_ID;

결과

직원  상사
홍길동 NULL
김철수 홍길동
이영희 홍길동
박민수 김철수

 

8.3.2 동일한 제품 카테고리 내 다른 제품 추천

 

PRODUCTS 테이블

PRODUCT_ID  PRODUCT_NAME  CATEGORY_ID
1 노트북 100
2 데스크탑 100
3 스마트폰 200
4 태블릿 200
SELECT P1.PRODUCT_NAME AS 제품, 
       P2.PRODUCT_NAME AS 관련_제품
FROM PRODUCTS P1
JOIN PRODUCTS P2
ON P1.CATEGORY_ID = P2.CATEGORY_ID
AND P1.PRODUCT_ID <> P2.PRODUCT_ID;

결과

제품  관련_제품
노트북 데스크탑
데스크탑 노트북
스마트폰 태블릿
태블릿 스마트폰

 


9. TABLE JOIN

Table Join은 데이터베이스에서 여러 개의 테이블을 조인(JOIN)하여 하나의 결과 집합을 만드는 과정입니다. RDBMS(관계형 데이터베이스)에서는 데이터를 여러 테이블에 나누어 저장하는데, 이를 다시 연결해서 원하는 데이터를 추출하는 것이 Table Join의 목적입니다.

보통 Table Join이란 말은 특정한 조인 방식(예: INNER JOIN, OUTER JOIN 등)을 지칭하기보다는 일반적인 조인(JOIN) 개념을 넓게 포괄하는 용어로 사용됩니다.

 

9.1. Table Join의 기본 개념

  • 여러 테이블을 조합하여 하나의 결과를 만드는 과정
  • 조인의 조건을 사용하여 서로 관련 있는 데이터만 결합
  • 관계형 데이터베이스에서 중복을 줄이고 정규화를 유지하는 핵심 기능

 

9.2 Table Join의 기본 구문

SELECT A.열_이름, B.열_이름
FROM 테이블A A, 테이블B B
WHERE A.공통_열 = B.공통_열;
  • 테이블A와 테이블B를 조인
  • 공통 키(A.공통_열 = B.공통_열)를 기준으로 연결

 

9.3 Table Join의 예제

 

CUSTOMERS 테이블

CUSTOMER_ID  NAME
101 홍길동
102 김철수
103 이영희

 

ORDERS 테이블

ORDER_ID   CUSTOMER_ID AMOUNT
1 101 500
2 103 1000
3 102 750

기본 조인 (EQUI JOIN)

SELECT C.CUSTOMER_ID, C.NAME, O.ORDER_ID, O.AMOUNT
FROM CUSTOMERS C, ORDERS O
WHERE C.CUSTOMER_ID = O.CUSTOMER_ID;

결과

CUSTOMER_ID NAME  ORDER_ID   AMOUNT
101 홍길동 1 500
102 김철수 3 750
103 이영희 2 1000

Table Join vs 다른 조인 방법

  • Table Join은 단순히 두 개 이상의 테이블을 조합하는 과정을 의미합니다.
  • 특정한 유형의 조인(INNER JOIN, OUTER JOIN 등)으로 세분화하여 사용할 수 있습니다.
  • 예를 들어, Table Join은 위와 같은 기본 조인의 개념을 포함하지만, 보다 정교한 방식으로 INNER JOIN, OUTER JOIN 등의 기법을 적용할 수 있습니다.

 


10. 마무리

이번 장에서는 JOIN의 개념과 종류(EQUI JOIN, NON-EQUI JOIN, INNER JOIN, OUTER JOIN, CROSS JOIN, NATURAL JOIN, SELF JOIN, TABLE JOIN, 표준 조인)을 학습했습니다.

  • EQUI JOIN: = 연산자로 데이터를 조인
  • NON-EQUI JOIN: = 이외의 연산자를 사용하여 데이터 조인
  • INNER JOIN: 일치하는 데이터만 반환
  • OUTER JOIN: 일치하지 않는 데이터도 포함 (LEFT, RIGHT, FULL)
  • CROSS JOIN: 데카르트 곱(Cartesian Product)을 생성하는 조인 방식
  • NATURAL JOIN:같은 이름을 가진 열을 자동으로 매칭하여 조인하는 방식
  • SELF JOIN: 같은 테이블을 두 번 사용하여 자기 자신과 조인하는 방식
  • 표준 조인: ANSI 표준 SQL 조인 방식
  • TABLE JOIN: 두 개 이상의 테이블을 조합하는 과정

 

💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.

 

반응형