티스토리 뷰

반응형
📘 데이터베이스 조인 — 정의, 필요성, 모든 경우의 수와 조건 필터링까지 완전한 정리

📘 데이터베이스 조인 — 정의, 필요성, 모든 경우의 수와 조건 필터링까지 완전한 정리

📖 조인이란

조인은 데이터베이스에서 두 릴레이션(테이블)의 데이터를 하나로 합치는 작업입니다.
두 테이블의 각 행이 어떻게 연결될지를 조건으로 정하고, 그 조건에 맞는 데이터만 결과에 남깁니다.
조건을 지정하지 않으면 두 릴레이션의 모든 행이 곱해지는 카티션 곱이 발생합니다.
따라서 조인은 모든 행 조합을 만든 뒤, 지정한 조건을 만족하는 것만 남긴다는 점이 중요합니다.
여기서는 대표적인 조인 방식 3가지(세타, equal, natural)를 정의, 필요성, 합치기 전 데이터, 카티션 곱, 조건 검사, 결과까지 전부 기술합니다.

📖 세타 조인

정의

세타 조인(θ-조인)은 두 릴레이션의 모든 행 조합을 만든 후,
그 중에서 지정한 비교 연산자(=, !=, <, >, <=, >=)를 만족하는 행만 결과에 남기는 조인입니다.
세타 조인은 다양한 조건으로 데이터를 연결할 수 있는 가장 일반적이고 유연한 방식입니다.

필요성

데이터를 연결할 때 정확히 같은 값이 아니라 범위에 속하거나 크기 비교를 해야 하는 경우가 있습니다.
예를 들어 점수가 특정 구간에 속할 때 등급을 부여해야 한다면, =만으로는 불가능합니다.
이런 경우 >=, <=처럼 다른 연산자를 써야 하기 때문에 세타 조인을 사용합니다.

합치기 전 데이터

학생 테이블

student_id name score
1홍길동85
2이몽룡90

등급 테이블

grade min_score max_score
A90100
B8089


모든 경우의 수 (카티션 곱)

두 테이블의 모든 행을 짝지어 만듭니다.
학생 2명 × 등급 2개 = 4개의 조합이 됩니다.
student_id name score grade min_score max_score
1홍길동85A90100
1홍길동85B8089
2이몽룡90A90100
2이몽룡90B8089


조건 검사

조건:
학생.score >= 등급.min_score AND 학생.score <= 등급.max_score
학생 등급 계산 조건 만족
홍길동(85)A(90~100)85 ≥ 90 ✖️
홍길동(85)B(80~89)85 ≥ 80 ✔️, 85 ≤ 89 ✔️
이몽룡(90)A(90~100)90 ≥ 90 ✔️, 90 ≤ 100 ✔️
이몽룡(90)B(80~89)90 ≥ 80 ✔️, 90 ≤ 89 ✖️


조건 만족하는 행만 남기기

student_id name score grade min_score max_score
1홍길동85B8089
2이몽룡90A90100


📖 equal 조인

정의

equal 조인은 세타 조인의 특수한 형태입니다.
조건에 =만 사용하는 조인으로, 두 릴레이션의 속성이 정확히 일치하는 경우에만 연결됩니다.
equal 조인은 데이터베이스에서 가장 흔히 사용되는 방식입니다.

필요성

두 릴레이션을 연결할 때, 공통 속성의 값이 정확히 같아야 하는 경우가 많습니다.
예를 들어 직원 테이블의 부서 번호와 부서 테이블의 부서 번호처럼, 같은 키 값으로 정확히 연결할 때 필요합니다.

합치기 전 데이터

직원 테이블

emp_id name dept_no
1홍길동10
2이몽룡20

부서 테이블

dept_no dept_name
10영업부
20인사부


모든 경우의 수 (카티션 곱)

직원 2명 × 부서 2개 = 4개의 조합이 됩니다.
emp_id name dept_no(직원) dept_no(부서) dept_name
1홍길동1010영업부
1홍길동1020인사부
2이몽룡2010영업부
2이몽룡2020인사부


조건 검사

조건:
직원.dept_no = 부서.dept_no
직원 부서 비교 조건 만족
홍길동(10)1010=10 ✔️
홍길동(10)2010=20 ✖️
이몽룡(20)1020=10 ✖️
이몽룡(20)2020=20 ✔️


조건 만족하는 행만 남기기

emp_id name dept_no dept_name
1홍길동10영업부
2이몽룡20인사부


📖 natural 조인

정의

natural 조인은 equal 조인과 같지만, 결과에서 중복된 공통 속성을 제거합니다.
두 릴레이션에 이름이 같은 속성이 있을 때 자동으로 기준으로 삼고, 결과에 한 번만 표시됩니다.

필요성

equal 조인을 하면 공통 속성이 두 번 표시됩니다.
이를 자동으로 하나로 줄여 결과를 간결하게 만들고, SQL 문장도 짧아집니다.

합치기 전 데이터

직원 테이블

emp_id name dept_no
1홍길동10
2이몽룡20

부서 테이블

dept_no dept_name
10영업부
20인사부


모든 경우의 수 (카티션 곱)

emp_id name dept_no(직원) dept_no(부서) dept_name
1홍길동1010영업부
1홍길동1020인사부
2이몽룡2010영업부
2이몽룡2020인사부


조건 검사

조건:
자동으로 dept_no(직원) = dept_no(부서)를 비교
직원 부서 비교 조건 만족
홍길동(10)1010=10 ✔️
홍길동(10)2010=20 ✖️
이몽룡(20)1020=10 ✖️
이몽룡(20)2020=20 ✔️


조건 만족하는 행만 남기기 + 중복 제거

emp_id name dept_no dept_name
1홍길동10영업부
2이몽룡20인사부


📖 조인 방식 비교 정리표

구분 조건 형태 중복 속성 처리
세타 조인 >=, <=, !=, <, > 가능 중복 속성 그대로
equal 조인 =만 사용 중복 속성 그대로
natural 조인 공통 속성을 자동으로 기준 삼음 자동으로 제거


📖 결론

  • 조인은 두 릴레이션의 데이터를 합치는 작업이며, 합친 후 원하는 데이터만 남기기 위해 항상 조건이 필요합니다.
  • 세타 조인은 비교 연산자를 자유롭게 사용 가능하며 범위 비교나 불일치 조건 등 유연한 데이터 연결이 가능합니다.
  • equal 조인은 가장 기본적이고 흔히 쓰이는 형태로, 두 속성 값이 정확히 같아야 하는 상황에 적합합니다.
  • natural 조인은 equal 조인을 더 간결하고 깔끔하게 만든 형태로, 공통 속성을 자동으로 기준 삼고 결과에서 중복 속성을 제거해줍니다.


반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
반응형