관계 λŒ€μˆ˜(Relational Algebra)

관계 λŒ€μˆ˜(Relational Algebra)

이전: 관계 λͺ¨λΈ | λ‹€μŒ: ER λͺ¨λΈλ§


관계 λŒ€μˆ˜λŠ” 관계 λͺ¨λΈμ˜ ν˜•μ‹μ  질의 μ–Έμ–΄μž…λ‹ˆλ‹€. ν•˜λ‚˜ λ˜λŠ” 두 개의 관계λ₯Ό μž…λ ₯으둜 λ°›μ•„ μƒˆλ‘œμš΄ 관계λ₯Ό 좜λ ₯으둜 μƒμ„±ν•˜λŠ” μ—°μ‚°μžμ˜ 집합을 μ œκ³΅ν•©λ‹ˆλ‹€. 관계 λŒ€μˆ˜λ₯Ό μ΄ν•΄ν•˜λŠ” 것은 SQL 쿼리 처리의 기반이 되기 λ•Œλ¬Έμ— ν•„μˆ˜μ μž…λ‹ˆλ‹€. λͺ¨λ“  SQL μΏΌλ¦¬λŠ” λ‚΄λΆ€μ μœΌλ‘œ 관계 λŒ€μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ λ³€ν™˜λ˜λ©°, 쿼리 μ΅œμ ν™”κΈ°λŠ” 이λ₯Ό λ³€ν™˜ν•˜κ³  κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ©μ°¨

  1. 관계 λŒ€μˆ˜ κ°œμš”
  2. 단항 μ—°μ‚°
  3. μ§‘ν•© μ—°μ‚°
  4. 이항 μ—°μ‚°: μΉ΄ν‹°μ…˜ κ³±κ³Ό 쑰인
  5. λ‚˜λˆ—μ…ˆ
  6. μΆ”κ°€ μ—°μ‚°
  7. 쿼리 νŠΈλ¦¬μ™€ λŒ€μˆ˜μ  μ΅œμ ν™”
  8. 관계 해석 (κ°„λ‹¨ν•œ μ†Œκ°œ)
  9. SQL과의 λ™μΉ˜μ„±
  10. μ™„μ „ν•œ μž‘μ—… 예제
  11. μ—°μŠ΅ 문제

1. 관계 λŒ€μˆ˜ κ°œμš”

관계 λŒ€μˆ˜λž€?

관계 λŒ€μˆ˜λŠ” 절차적(procedural) 쿼리 μ–Έμ–΄μž…λ‹ˆλ‹€. μ›ν•˜λŠ” κ²°κ³Όλ₯Ό κ³„μ‚°ν•˜κΈ° μœ„ν•œ 일련의 연산을 κΈ°μˆ ν•©λ‹ˆλ‹€. 각 연산은 ν•˜λ‚˜ μ΄μƒμ˜ 관계λ₯Ό λ°›μ•„ μƒˆλ‘œμš΄ 관계λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

속성:
  - 폐쇄성(Closure): λͺ¨λ“  μ—°μ‚°μ˜ κ²°κ³ΌλŠ” κ΄€κ³„μž…λ‹ˆλ‹€
                     (μ—°μ‚°μ˜ 쑰합을 κ°€λŠ₯ν•˜κ²Œ 함)
  - μ§‘ν•© 의미둠: κ΄€κ³„λŠ” μ§‘ν•©μž…λ‹ˆλ‹€ (쀑볡 νŠœν”Œ μ—†μŒ)
  - 기반: μ§‘ν•© 이둠과 1μ°¨ 논리λ₯Ό 기반으둜 함

μ—°μ‚°μ˜ λ²”μ£Ό

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              관계 λŒ€μˆ˜ μ—°μ‚°(Relational Algebra Operations)      β”‚
β”‚                                                             β”‚
β”‚  κΈ°λ³Έ(λ‹€λ₯Έ μ—°μ‚°μœΌλ‘œ ν‘œν˜„ λΆˆκ°€):                                 β”‚
β”‚    Οƒ  선택(Selection)          (ν–‰ 필터링)                    β”‚
β”‚    Ο€  ν”„λ‘œμ μ…˜(Projection)      (μ—΄ 선택)                     β”‚
β”‚    ρ  재λͺ…λͺ…(Rename)            (관계/속성 이름 λ³€κ²½)          β”‚
β”‚    βˆͺ  ν•©μ§‘ν•©(Union)             (두 관계 κ²°ν•©)                 β”‚
β”‚    βˆ’  μ°¨μ§‘ν•©(Set Difference)    (R에 μžˆμ§€λ§Œ S에 μ—†λŠ” νŠœν”Œ)     β”‚
β”‚    Γ—  μΉ΄ν‹°μ…˜ κ³±(Cartesian Product)  (λͺ¨λ“  μ‘°ν•©)              β”‚
β”‚                                                             β”‚
β”‚  μœ λ„(κΈ°λ³Έ μ—°μ‚°μœΌλ‘œ ν‘œν˜„ κ°€λŠ₯):                                 β”‚
β”‚    β‹ˆ  쑰인(Join) (λ‹€μ–‘ν•œ μœ ν˜•)                                β”‚
β”‚    ∩  ꡐ집합(Intersection)                                   β”‚
β”‚    Γ·  λ‚˜λˆ—μ…ˆ(Division)                                       β”‚
β”‚    ←  λŒ€μž…(Assignment)                                      β”‚
β”‚    Ξ΄  쀑볡 제거(Duplicate elimination) (λ°± 의미둠용)          β”‚
β”‚    Ξ³  κ·Έλ£Ήν™”/집계(Grouping/Aggregation)                      β”‚
β”‚    Ο„  μ •λ ¬(Sorting)                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ‹€ν–‰ 예제 λ°μ΄ν„°λ² μ΄μŠ€

이 κ°•μ˜ μ „μ²΄μ—μ„œ λ‹€μŒ μƒ˜ν”Œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€:

STUDENT:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name      β”‚ year β”‚ dept β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice     β”‚  3   β”‚ CS   β”‚
β”‚ S002 β”‚ Bob       β”‚  2   β”‚ CS   β”‚
β”‚ S003 β”‚ Carol     β”‚  4   β”‚ EE   β”‚
β”‚ S004 β”‚ Dave      β”‚  3   β”‚ ME   β”‚
β”‚ S005 β”‚ Eve       β”‚  1   β”‚ CS   β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

COURSE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚ cid   β”‚ title                β”‚ credits β”‚ dept β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
β”‚ CS101 β”‚ Intro to CS          β”‚ 3       β”‚ CS   β”‚
β”‚ CS301 β”‚ Database Theory      β”‚ 3       β”‚ CS   β”‚
β”‚ CS401 β”‚ Machine Learning     β”‚ 4       β”‚ CS   β”‚
β”‚ EE201 β”‚ Circuit Analysis     β”‚ 3       β”‚ EE   β”‚
β”‚ MA101 β”‚ Calculus I           β”‚ 4       β”‚ MA   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

ENROLLMENT:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ cid   β”‚ grade β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ CS101 β”‚ A     β”‚
β”‚ S001 β”‚ CS301 β”‚ A+    β”‚
β”‚ S001 β”‚ MA101 β”‚ B+    β”‚
β”‚ S002 β”‚ CS101 β”‚ B     β”‚
β”‚ S002 β”‚ CS301 β”‚ A-    β”‚
β”‚ S003 β”‚ EE201 β”‚ A     β”‚
β”‚ S003 β”‚ CS101 β”‚ B+    β”‚
β”‚ S004 β”‚ CS101 β”‚ C     β”‚
β”‚ S005 β”‚ CS101 β”‚ A     β”‚
β”‚ S005 β”‚ MA101 β”‚ A-    β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

INSTRUCTOR:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ iid  β”‚ name     β”‚ dept β”‚ salary β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ I001 β”‚ Prof. Kimβ”‚ CS   β”‚ 95000  β”‚
β”‚ I002 β”‚ Prof. Leeβ”‚ CS   β”‚ 88000  β”‚
β”‚ I003 β”‚ Prof. Parkβ”‚ EE  β”‚ 92000  β”‚
β”‚ I004 β”‚ Prof. Choiβ”‚ MA  β”‚ 85000  β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. 단항 μ—°μ‚°

단항 연산은 단일 관계λ₯Ό μž…λ ₯으둜 λ°›μŠ΅λ‹ˆλ‹€.

선택 (sigma)

선택(Selection) 연산은 쑰건(predicate)을 기반으둜 행을 ν•„ν„°λ§ν•©λ‹ˆλ‹€.

ν‘œκΈ°λ²•:   Οƒ_쑰건(R)

좜λ ₯:     쑰건을 λ§Œμ‘±ν•˜λŠ” R의 νŠœν”Œλ§Œμ„ ν¬ν•¨ν•˜λŠ” 관계.

μŠ€ν‚€λ§ˆ:   Rκ³Ό 동일 (λͺ¨λ“  속성 μœ μ§€)

ν˜•μ‹μ  μ •μ˜:

Οƒ_쑰건(R) = { t | t ∈ R  AND  condition(t)이 TRUE }

예제:

1. CS 학생 선택:

   Οƒ_{dept='CS'}(STUDENT)

   κ²°κ³Ό:
   β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
   β”‚ sid  β”‚ name  β”‚ year β”‚ dept β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
   β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚
   β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚
   β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚
   β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜


2. 3ν•™λ…„ CS 학생 선택:

   Οƒ_{dept='CS' AND year=3}(STUDENT)

   κ²°κ³Ό:
   β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
   β”‚ sid  β”‚ name  β”‚ year β”‚ dept β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
   β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚
   β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜


3. 4학점 κ³Όλͺ© 선택:

   Οƒ_{credits=4}(COURSE)

   κ²°κ³Ό:
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
   β”‚ cid   β”‚ title            β”‚ credits β”‚ dept β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
   β”‚ CS401 β”‚ Machine Learning β”‚ 4       β”‚ CS   β”‚
   β”‚ MA101 β”‚ Calculus I       β”‚ 4       β”‚ MA   β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

선택 쑰건에 μ‚¬μš© κ°€λŠ₯ν•œ 것: - 비ꡐ μ—°μ‚°μž: =, β‰ , <, >, ≀, β‰₯ - 논리 연결사: AND (∧), OR (∨), NOT (Β¬) - 속성 이름과 μƒμˆ˜

ν”„λ‘œμ μ…˜ (pi)

ν”„λ‘œμ μ…˜(Projection) 연산은 νŠΉμ • μ—΄(속성)을 μ„ νƒν•˜κ³  쀑볡을 μ œκ±°ν•©λ‹ˆλ‹€.

ν‘œκΈ°λ²•:   Ο€_{속성_λͺ©λ‘}(R)

좜λ ₯:     μ§€μ •λœ μ†μ„±λ§Œμ„ ν¬ν•¨ν•˜λŠ” 관계,
          쀑볡 νŠœν”Œ 제거.

μŠ€ν‚€λ§ˆ:   속성_λͺ©λ‘μ˜ μ†μ„±λ§Œ

ν˜•μ‹μ  μ •μ˜:

Ο€_{A1, A2, ..., Ak}(R) = { <t[A1], t[A2], ..., t[Ak]> | t ∈ R }

예제:

1. 학생 이름과 ν•™κ³Ό ν”„λ‘œμ μ…˜:

   Ο€_{name, dept}(STUDENT)

   κ²°κ³Ό:
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
   β”‚ name  β”‚ dept β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
   β”‚ Alice β”‚ CS   β”‚
   β”‚ Bob   β”‚ CS   β”‚
   β”‚ Carol β”‚ EE   β”‚
   β”‚ Dave  β”‚ ME   β”‚
   β”‚ Eve   β”‚ CS   β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜


2. STUDENTμ—μ„œ 쀑볡 μ—†λŠ” ν•™κ³Ό ν”„λ‘œμ μ…˜:

   Ο€_{dept}(STUDENT)

   κ²°κ³Ό:
   β”Œβ”€β”€β”€β”€β”€β”€β”
   β”‚ dept β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€
   β”‚ CS   β”‚
   β”‚ EE   β”‚
   β”‚ ME   β”‚
   β””β”€β”€β”€β”€β”€β”€β”˜
   (μ°Έκ³ : CSλŠ” 쀑볡이 μ œκ±°λ˜μ–΄ ν•œ 번만 λ‚˜νƒ€λ‚¨)


3. 선택과 ν”„λ‘œμ μ…˜ μ‘°ν•©:

   "CS ν•™μƒμ˜ 이름 μ°ΎκΈ°"
   Ο€_{name}(Οƒ_{dept='CS'}(STUDENT))

   1단계: Οƒ_{dept='CS'}(STUDENT) β†’ {Alice/CS, Bob/CS, Eve/CS}
   2단계: Ο€_{name}(...) β†’ {Alice, Bob, Eve}

   κ²°κ³Ό:
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”
   β”‚ name  β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€
   β”‚ Alice β”‚
   β”‚ Bob   β”‚
   β”‚ Eve   β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”˜

재λͺ…λͺ… (rho)

재λͺ…λͺ…(Rename) 연산은 관계 및/λ˜λŠ” κ·Έ μ†μ„±μ˜ 이름을 λ³€κ²½ν•©λ‹ˆλ‹€.

ν‘œκΈ°λ²•:   ρ_{S(B1, B2, ..., Bn)}(R)

          관계 R을 S둜 재λͺ…λͺ…ν•˜κ³  속성을 B1, B2, ..., Bn으둜 λ³€κ²½

μΆ•μ•½ν˜•:   ρ_S(R)          -- κ΄€κ³„λ§Œ 재λͺ…λͺ…
          ρ_{(B1,...,Bn)}(R) -- μ†μ„±λ§Œ 재λͺ…λͺ…

예제:

1. STUDENTλ₯Ό S둜 재λͺ…λͺ…:

   ρ_S(STUDENT)
   β†’ λ™μΌν•œ νŠœν”Œμ΄μ§€λ§Œ κ΄€κ³„λŠ” 이제 S둜 호좜됨

2. 자기 쑰인 μ€€λΉ„λ₯Ό μœ„ν•œ 재λͺ…λͺ…:

   ρ_{S1(sid1, name1, year1, dept1)}(STUDENT)
   ρ_{S2(sid2, name2, year2, dept2)}(STUDENT)

   이제 속성 이름 좩돌 없이 S1κ³Ό S2λ₯Ό 쑰인할 수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ‹€μš©μ  μ‚¬μš© - 같은 ν•™κ³Όμ˜ 학생 쌍 μ°ΎκΈ°:

   Οƒ_{S1.dept = S2.dept AND S1.sid < S2.sid}(
       ρ_{S1(sid1, name1, year1, dept1)}(STUDENT) Γ—
       ρ_{S2(sid2, name2, year2, dept2)}(STUDENT)
   )

3. μ§‘ν•© μ—°μ‚°

μ§‘ν•© 연산은 합병 ν˜Έν™˜(union-compatible) (λ˜λŠ” νƒ€μž… ν˜Έν™˜) 관계λ₯Ό μš”κ΅¬ν•©λ‹ˆλ‹€. λ™μΌν•œ 수의 속성을 κ°€μ Έμ•Ό ν•˜λ©°, λŒ€μ‘ν•˜λŠ” 속성듀은 ν˜Έν™˜ κ°€λŠ₯ν•œ 도메인을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.

합병 ν˜Έν™˜μ„±:
  R(A1: D1, A2: D2, ..., An: Dn)
  S(B1: D1, B2: D2, ..., Bn: Dn)

  λ™μΌν•œ 수의 속성 (n)κ³Ό ν˜Έν™˜ κ°€λŠ₯ν•œ 도메인.
  속성 이름은 λ‹€λ₯Ό 수 있음 (κ²°κ³ΌλŠ” κ΄€λ‘€μ μœΌλ‘œ R의 이름 μ‚¬μš©).

ν•©μ§‘ν•©

ν‘œκΈ°λ²•:   R βˆͺ S

좜λ ₯:     R, S, λ˜λŠ” λ‘˜ 닀에 μžˆλŠ” λͺ¨λ“  νŠœν”Œ.
          쀑볡 제거됨.

R βˆͺ S = { t | t ∈ R  OR  t ∈ S }

예제:

CS_STUDENTS = Ο€_{sid, name}(Οƒ_{dept='CS'}(STUDENT))
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice β”‚
β”‚ S002 β”‚ Bob   β”‚
β”‚ S005 β”‚ Eve   β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

YEAR3_STUDENTS = Ο€_{sid, name}(Οƒ_{year=3}(STUDENT))
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice β”‚
β”‚ S004 β”‚ Dave  β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

CS_STUDENTS βˆͺ YEAR3_STUDENTS =
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice β”‚  ← λ‘˜ 닀에 λ‚˜νƒ€λ‚˜μ§€λ§Œ ν•œ 번만 λ‚˜μ—΄
β”‚ S002 β”‚ Bob   β”‚
β”‚ S005 β”‚ Eve   β”‚
β”‚ S004 β”‚ Dave  β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

μ°¨μ§‘ν•©

ν‘œκΈ°λ²•:   R βˆ’ S  (λ˜λŠ” R \ S)

좜λ ₯:     Rμ—λŠ” μžˆμ§€λ§Œ Sμ—λŠ” μ—†λŠ” νŠœν”Œ.

R βˆ’ S = { t | t ∈ R  AND  t βˆ‰ S }

예제:

"3학년이 μ•„λ‹Œ CS 학생"

CS_STUDENTS βˆ’ YEAR3_STUDENTS =
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
β”‚ S002 β”‚ Bob  β”‚
β”‚ S005 β”‚ Eve  β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

μ°Έκ³ : Alice (S001)λŠ” YEAR3_STUDENTS에 있기 λ•Œλ¬Έμ— 제거됨.
μ°Έκ³ : R βˆ’ S β‰  S βˆ’ R  (차집합은 κ΅ν™˜λ²•μΉ™μ΄ μ„±λ¦½ν•˜μ§€ μ•ŠμŒ)

YEAR3_STUDENTS βˆ’ CS_STUDENTS =
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
β”‚ S004 β”‚ Dave β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

ꡐ집합

ν‘œκΈ°λ²•:   R ∩ S

좜λ ₯:     Rκ³Ό S λ‘˜ 닀에 μžˆλŠ” νŠœν”Œ.

R ∩ S = { t | t ∈ R  AND  t ∈ S }

μ°Έκ³ : R ∩ S = R βˆ’ (R βˆ’ S)  (ꡐ집합은 μœ λ„ κ°€λŠ₯)

예제:

"CSμ΄λ©΄μ„œ 3학년인 학생"

CS_STUDENTS ∩ YEAR3_STUDENTS =
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

μ§‘ν•© μ—°μ‚° μš”μ•½

     R           S                R βˆͺ S         R βˆ’ S         R ∩ S

  β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”
  β”‚ a    β”‚   β”‚ a    β”‚         β”‚ a    β”‚      β”‚ b    β”‚     β”‚ a    β”‚
  β”‚ b    β”‚   β”‚ a    β”‚         β”‚ b    β”‚      β”‚ c    β”‚     β”‚      β”‚
  β”‚ c    β”‚   β”‚ d    β”‚         β”‚ c    β”‚      β””β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”˜
  β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜         β”‚ d    β”‚
                              β””β”€β”€β”€β”€β”€β”€β”˜

  λ²€ λ‹€μ΄μ–΄κ·Έλž¨:
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚  R          β”‚
       β”‚      β”Œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”
       β”‚      β”‚ R∩S  β”‚      β”‚
       β”‚      β”‚      β”‚   S  β”‚
       β””β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”˜      β”‚
              β”‚             β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  R βˆͺ S = 전체 음영 μ˜μ—­
  R βˆ’ S = μ™Όμͺ½λ§Œ (κ²ΉμΉ˜μ§€ μ•ŠμŒ)
  R ∩ S = κ²ΉμΉ˜λŠ” λΆ€λΆ„λ§Œ
  S βˆ’ R = 였λ₯Έμͺ½λ§Œ (κ²ΉμΉ˜μ§€ μ•ŠμŒ)

4. 이항 μ—°μ‚°: μΉ΄ν‹°μ…˜ κ³±κ³Ό 쑰인

μΉ΄ν‹°μ…˜ κ³± (크둜슀 κ³±)

ν‘œκΈ°λ²•:   R Γ— S

좜λ ₯:     R의 λͺ¨λ“  νŠœν”Œκ³Ό S의 λͺ¨λ“  νŠœν”Œμ˜ κ²°ν•©.
          R이 n개의 νŠœν”Œ, Sκ°€ m개의 νŠœν”Œμ΄λ©΄, R Γ— SλŠ” n Γ— m개의 νŠœν”Œ.
          R이 p개의 속성, Sκ°€ q개의 속성이면, R Γ— SλŠ” p + q개의 속성.

ν˜•μ‹μ  μ •μ˜:

R Γ— S = { <t_r, t_s> | t_r ∈ R  AND  t_s ∈ S }

예제:

A = {(a1, b1), (a2, b2)}     B = {(c1, d1), (c2, d2), (c3, d3)}

A Γ— B =
β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”
β”‚ A  β”‚ B  β”‚ C  β”‚ D  β”‚
β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€
β”‚ a1 β”‚ b1 β”‚ c1 β”‚ d1 β”‚
β”‚ a1 β”‚ b1 β”‚ c2 β”‚ d2 β”‚
β”‚ a1 β”‚ b1 β”‚ c3 β”‚ d3 β”‚
β”‚ a2 β”‚ b2 β”‚ c1 β”‚ d1 β”‚
β”‚ a2 β”‚ b2 β”‚ c2 β”‚ d2 β”‚
β”‚ a2 β”‚ b2 β”‚ c3 β”‚ d3 β”‚
β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜

|A| = 2, |B| = 3, |A Γ— B| = 2 Γ— 3 = 6

μΉ΄ν‹°μ…˜ κ³± μžμ²΄λŠ” λ§Žμ€ 의미 μ—†λŠ” 쑰합을 μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— 거의 μœ μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 선택과 κ²°ν•©ν•  λ•Œ(쑰인을 제곡) κ°•λ ₯ν•΄μ§‘λ‹ˆλ‹€.

세타 쑰인

세타 쑰인(Theta Join)은 μΉ΄ν‹°μ…˜ κ³±κ³Ό 선택을 κ²°ν•©ν•©λ‹ˆλ‹€:

ν‘œκΈ°λ²•:   R β‹ˆ_ΞΈ S   (μ—¬κΈ°μ„œ ΞΈλŠ” 쑰건)

μ •μ˜:     R β‹ˆ_ΞΈ S = Οƒ_ΞΈ(R Γ— S)

쑰건 ΞΈλŠ” =, β‰ , <, >, ≀, β‰₯ λ“±μ˜ 비ꡐλ₯Ό μ‚¬μš©ν•  수 있음

예제:

"같은 ν•™κ³Όμ˜ 학생과 κ³Όλͺ© μ°ΎκΈ°"

STUDENT β‹ˆ_{STUDENT.dept = COURSE.dept} COURSE

λ™μΉ˜: Οƒ_{STUDENT.dept = COURSE.dept}(STUDENT Γ— COURSE)

κ²°κ³Ό (일뢀):
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name  β”‚ year β”‚ s.deptβ”‚ cid  β”‚ title            β”‚ credits β”‚c.dept β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ CS101 β”‚ Intro to CS      β”‚ 3       β”‚ CS    β”‚
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ CS301 β”‚ Database Theory  β”‚ 3       β”‚ CS    β”‚
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ CS401 β”‚ Machine Learning β”‚ 4       β”‚ CS    β”‚
β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚ CS101 β”‚ Intro to CS      β”‚ 3       β”‚ CS    β”‚
β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚ CS301 β”‚ Database Theory  β”‚ 3       β”‚ CS    β”‚
β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚ CS401 β”‚ Machine Learning β”‚ 4       β”‚ CS    β”‚
β”‚ S003 β”‚ Carol β”‚  4   β”‚ EE   β”‚ EE201 β”‚ Circuit Analysis β”‚ 3       β”‚ EE    β”‚
β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚ CS101 β”‚ Intro to CS      β”‚ 3       β”‚ CS    β”‚
β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚ CS301 β”‚ Database Theory  β”‚ 3       β”‚ CS    β”‚
β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚ CS401 β”‚ Machine Learning β”‚ 4       β”‚ CS    β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜
(Dave/MEλŠ” μΌμΉ˜ν•˜λŠ” κ³Όλͺ©μ΄ μ—†μ–΄ 결과에 μ—†μŒ)

동등 쑰인

동등 쑰인(Equi-Join)은 쑰건이 동등(=)만 μ‚¬μš©ν•˜λŠ” 세타 μ‘°μΈμž…λ‹ˆλ‹€:

R β‹ˆ_{R.A = S.B} S

λͺ¨λ“  동등 쑰인은 세타 μ‘°μΈμ΄μ§€λ§Œ, λͺ¨λ“  세타 쑰인이 동등 쑰인은 μ•„λ‹˜.
R.A > S.Bλ₯Ό μ‚¬μš©ν•˜λŠ” 세타 쑰인은 동등 쑰인이 μ•„λ‹˜.

μžμ—° 쑰인

μžμ—° 쑰인(Natural Join)은 λ‹€μŒκ³Ό 같은 νŠΉλ³„ν•œ 동등 μ‘°μΈμž…λ‹ˆλ‹€: 1. λͺ¨λ“  곡톡 속성 μ΄λ¦„μ—μ„œ 쑰인 2. κ²°κ³Όμ—μ„œ 쀑볡 μ—΄ 제거

ν‘œκΈ°λ²•:   R β‹ˆ S   (μ•„λž˜ 첨자 μ—†μŒ)

μ •μ˜:     Rκ³Ό Sμ—μ„œ 같은 이름을 κ°€μ§„ λͺ¨λ“  μ†μ„±μ—μ„œ μ‘°μΈν•œ ν›„,
          쀑볡 속성 열을 ν”„λ‘œμ μ…˜μœΌλ‘œ 제거.

예제:

STUDENT β‹ˆ ENROLLMENT

곡톡 속성: sid

1단계: STUDENT.sid = ENROLLMENT.sidμ—μ„œ 동등 쑰인
2단계: 쀑볡 sid μ—΄ 제거

κ²°κ³Ό:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name  β”‚ year β”‚ dept β”‚ cid   β”‚ grade β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ CS101 β”‚ A     β”‚
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ CS301 β”‚ A+    β”‚
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ MA101 β”‚ B+    β”‚
β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚ CS101 β”‚ B     β”‚
β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚ CS301 β”‚ A-    β”‚
β”‚ S003 β”‚ Carol β”‚  4   β”‚ EE   β”‚ EE201 β”‚ A     β”‚
β”‚ S003 β”‚ Carol β”‚  4   β”‚ EE   β”‚ CS101 β”‚ B+    β”‚
β”‚ S004 β”‚ Dave  β”‚  3   β”‚ ME   β”‚ CS101 β”‚ C     β”‚
β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚ CS101 β”‚ A     β”‚
β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚ MA101 β”‚ A-    β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

κ²½κ³ : 관계가 μ˜λ„μΉ˜ μ•Šκ²Œ 속성 이름을 κ³΅μœ ν•  λ•Œ μžμ—° 쑰인에 주의!

STUDENT(sid, name, year, dept) β‹ˆ COURSE(cid, title, credits, dept)
                          ^^^^                                ^^^^
μ΄λŠ” 'dept'μ—μ„œ μ‘°μΈν•˜λŠ”λ°, μ›ν•˜λŠ” 것이 아닐 수 있음!
학생을 κ·Έλ“€μ˜ ν•™κ³Όμ˜ κ³Όλͺ©κ³Ό λ§€μΉ­μ‹œν‚΄.

μ™ΈλΆ€ 쑰인

ν‘œμ€€ 쑰인은 λ§€μΉ­λ˜μ§€ μ•ŠλŠ” νŠœν”Œμ„ λ²„λ¦½λ‹ˆλ‹€. μ™ΈλΆ€ 쑰인(Outer Join)은 NULL둜 μ±„μ›Œμ„œ λ§€μΉ­λ˜μ§€ μ•ŠλŠ” νŠœν”Œμ„ λ³΄μ‘΄ν•©λ‹ˆλ‹€.

μ„Έ κ°€μ§€ μœ ν˜•:

1. μ™Όμͺ½ μ™ΈλΆ€ 쑰인(LEFT OUTER JOIN) (βŸ•):
   μ™Όμͺ½ κ΄€κ³„μ˜ λͺ¨λ“  νŠœν”Œ μœ μ§€.
   였λ₯Έμͺ½μ— 맀칭이 μ—†μœΌλ©΄ NULL둜 채움.

2. 였λ₯Έμͺ½ μ™ΈλΆ€ 쑰인(RIGHT OUTER JOIN) (βŸ–):
   였λ₯Έμͺ½ κ΄€κ³„μ˜ λͺ¨λ“  νŠœν”Œ μœ μ§€.
   μ™Όμͺ½μ— 맀칭이 μ—†μœΌλ©΄ NULL둜 채움.

3. μ™„μ „ μ™ΈλΆ€ 쑰인(FULL OUTER JOIN) (βŸ—):
   μ–‘μͺ½ κ΄€κ³„μ˜ λͺ¨λ“  νŠœν”Œ μœ μ§€.
   ν•„μš”μ— 따라 μ–‘μͺ½μ„ NULL둜 채움.

예제: μ™Όμͺ½ μ™ΈλΆ€ 쑰인

STUDENT βŸ•_{STUDENT.sid = ENROLLMENT.sid} ENROLLMENT

"등둝이 μ—†λŠ” 학생을 ν¬ν•¨ν•˜μ—¬ λͺ¨λ“  학생과 κ·Έλ“€μ˜ 등둝 μ°ΎκΈ°"

(λ°μ΄ν„°μ—μ„œ S004/Daveκ°€ 등둝이 μ—†λ‹€κ³  κ°€μ •.)

Daveκ°€ 등둝이 μ—†λ‹€λ©΄:

κ²°κ³Ό:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sid  β”‚ name  β”‚ year β”‚ dept β”‚ cid   β”‚ grade β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ CS101 β”‚ A     β”‚
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ CS301 β”‚ A+    β”‚
β”‚ S001 β”‚ Alice β”‚  3   β”‚ CS   β”‚ MA101 β”‚ B+    β”‚
β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚ CS101 β”‚ B     β”‚
β”‚ S002 β”‚ Bob   β”‚  2   β”‚ CS   β”‚ CS301 β”‚ A-    β”‚
β”‚ S003 β”‚ Carol β”‚  4   β”‚ EE   β”‚ EE201 β”‚ A     β”‚
β”‚ S003 β”‚ Carol β”‚  4   β”‚ EE   β”‚ CS101 β”‚ B+    β”‚
β”‚ S004 β”‚ Dave  β”‚  3   β”‚ ME   β”‚ NULL  β”‚ NULL  β”‚  ← NULL둜 보쑴됨
β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚ CS101 β”‚ A     β”‚
β”‚ S005 β”‚ Eve   β”‚  1   β”‚ CS   β”‚ MA101 β”‚ A-    β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

쑰인 비ꡐ μš”μ•½

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        쑰인 μœ ν˜•                                   β”‚
β”‚                                                                  β”‚
β”‚  μΉ΄ν‹°μ…˜ κ³±         R Γ— S      λͺ¨λ“  μ‘°ν•© (n Γ— m νŠœν”Œ)              β”‚
β”‚  세타 쑰인         R β‹ˆ_ΞΈ S    μΉ΄ν‹°μ…˜ + ΞΈ 선택                    β”‚
β”‚  동등 쑰인         R β‹ˆ_{=} S  λ™λ“±λ§Œ μ‚¬μš©ν•˜λŠ” 세타 쑰인           β”‚
β”‚  μžμ—° 쑰인         R β‹ˆ S      곡톡 μ†μ„±μ—μ„œ 동등 쑰인,            β”‚
β”‚                                쀑볡 제거                          β”‚
β”‚  μ™Όμͺ½ μ™ΈλΆ€ 쑰인    R βŸ• S      μžμ—° + λ§€μΉ­ μ•ˆλœ R μœ μ§€            β”‚
β”‚  였λ₯Έμͺ½ μ™ΈλΆ€ 쑰인  R βŸ– S      μžμ—° + λ§€μΉ­ μ•ˆλœ S μœ μ§€            β”‚
β”‚  μ™„μ „ μ™ΈλΆ€ 쑰인    R βŸ— S      μžμ—° + λ§€μΉ­ μ•ˆλœ λͺ¨λ‘ μœ μ§€         β”‚
β”‚  μ„Έλ―Έ 쑰인        R ⋉ S       S에 맀칭이 μžˆλŠ” R의 νŠœν”Œ           β”‚
β”‚  μ•ˆν‹° 쑰인        R β–· S       S에 맀칭이 μ—†λŠ” R의 νŠœν”Œ           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ„Έλ―Έ 쑰인과 μ•ˆν‹° 쑰인

μ„Έλ―Έ 쑰인:  R ⋉ S = Ο€_{attrs(R)}(R β‹ˆ S)

"S에 λ§€μΉ­λ˜λŠ” νŠœν”Œμ΄ μžˆλŠ” R의 νŠœν”Œ λ°˜ν™˜"
(κ²°κ³Όμ—λŠ” R의 μ†μ„±λ§Œ λ‚˜νƒ€λ‚¨)

μ•ˆν‹° 쑰인:  R β–· S = R βˆ’ Ο€_{attrs(R)}(R β‹ˆ S)

"S에 λ§€μΉ­λ˜λŠ” νŠœν”Œμ΄ μ—†λŠ” R의 νŠœν”Œ λ°˜ν™˜"

예제:

"μ΅œμ†Œ ν•œ κ³Όλͺ©μ— λ“±λ‘ν•œ 학생" (μ„Έλ―Έ 쑰인):
STUDENT ⋉ ENROLLMENT
β†’ ENROLLMENT에 λ‚˜νƒ€λ‚˜λŠ” STUDENT의 λͺ¨λ“  학생

"μ–΄λ–€ κ³Όλͺ©μ—λ„ λ“±λ‘ν•˜μ§€ μ•Šμ€ 학생" (μ•ˆν‹° 쑰인):
STUDENT β–· ENROLLMENT
β†’ λ§€μΉ­λ˜λŠ” 등둝이 μ—†λŠ” 학생

5. λ‚˜λˆ—μ…ˆ

λ‚˜λˆ—μ…ˆ(Division) 연산은 "λͺ¨λ“ (for all)" 쿼리에 λ‹΅ν•©λ‹ˆλ‹€. 관계 λŒ€μˆ˜μ—μ„œ κ°€μž₯ κ°•λ ₯ν•˜λ©΄μ„œλ„ κ°€μž₯ 직관적이지 μ•Šμ€ μ—°μ‚° 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

ν‘œκΈ°λ²•:   R Γ· S

μ£Όμ–΄μ§„:   R(A1, A2, ..., An, B1, B2, ..., Bm)
          S(B1, B2, ..., Bm)

κ²°κ³Ό:     S의 λͺ¨λ“  νŠœν”Œ s에 λŒ€ν•΄, νŠœν”Œ <t, s>κ°€ R에 μžˆλŠ”
          {A1, ..., An}에 λŒ€ν•œ νŠœν”Œ t.

ν˜•μ‹μ μœΌλ‘œ:
  R Γ· S = { t | t ∈ Ο€_{A}(R) AND βˆ€s ∈ S : <t,s> ∈ R }

  μ—¬κΈ°μ„œ A = {A1, ..., An} (Rμ—λŠ” μžˆμ§€λ§Œ Sμ—λŠ” μ—†λŠ” 속성)

κΈ°λ³Έ μ—°μ‚°μœΌλ‘œ ν‘œν˜„λœ λ‚˜λˆ—μ…ˆ

R Γ· S = Ο€_A(R) βˆ’ Ο€_A( (Ο€_A(R) Γ— S) βˆ’ R )

μ„€λͺ…:
  1. Ο€_A(R)              = R의 λͺ¨λ“  κ°€λŠ₯ν•œ A-κ°’
  2. Ο€_A(R) Γ— S          = λͺ¨λ“  A-κ°’κ³Ό λͺ¨λ“  S-νŠœν”Œμ˜ 짝
  3. (Ο€_A(R) Γ— S) βˆ’ R    = Rμ—μ„œ λΉ μ§„ μ‘°ν•©
  4. Ο€_A(...)             = μ΅œμ†Œ ν•˜λ‚˜μ˜ S-νŠœν”Œμ΄ λΉ μ§„ A-κ°’
  5. Ο€_A(R) βˆ’ ...         = S-νŠœν”Œμ΄ ν•˜λ‚˜λ„ λΉ μ§€μ§€ μ•Šμ€ A-κ°’
                          = λͺ¨λ“  S-νŠœν”Œκ³Ό μ—°κ΄€λœ A-κ°’

λ‚˜λˆ—μ…ˆ 예제

"λͺ¨λ“  CS κ³Όλͺ©μ— λ“±λ‘ν•œ 학생 μ°ΎκΈ°"

1단계: ν”Όμ œμˆ˜ μ •μ˜ (학생-κ³Όλͺ© 쌍)
  R = Ο€_{sid, cid}(ENROLLMENT)
  β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ sid  β”‚ cid   β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ S001 β”‚ CS101 β”‚
  β”‚ S001 β”‚ CS301 β”‚
  β”‚ S001 β”‚ MA101 β”‚
  β”‚ S002 β”‚ CS101 β”‚
  β”‚ S002 β”‚ CS301 β”‚
  β”‚ S003 β”‚ EE201 β”‚
  β”‚ S003 β”‚ CS101 β”‚
  β”‚ S004 β”‚ CS101 β”‚
  β”‚ S005 β”‚ CS101 β”‚
  β”‚ S005 β”‚ MA101 β”‚
  β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

2단계: 제수 μ •μ˜ (λͺ¨λ“  CS κ³Όλͺ©)
  S = Ο€_{cid}(Οƒ_{dept='CS'}(COURSE))
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”
  β”‚ cid   β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ CS101 β”‚
  β”‚ CS301 β”‚
  β”‚ CS401 β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”˜

3단계: R Γ· S = {CS101, CS301, CS401} λͺ¨λ‘μ™€ μ—°κ΄€λœ 학생

  각 학생 확인:
    S001: {CS101, CS301}이 μžˆμ§€λ§Œ CS401이 μ—†μŒ β†’ βœ—
    S002: {CS101, CS301}이 μžˆμ§€λ§Œ CS401이 μ—†μŒ β†’ βœ—
    S003: {CS101}만 있음                       β†’ βœ—
    S004: {CS101}만 있음                       β†’ βœ—
    S005: {CS101}만 있음                       β†’ βœ—

  κ²°κ³Ό: 곡집합 (μ„Έ CS κ³Όλͺ© λͺ¨λ‘μ— λ“±λ‘ν•œ 학생 μ—†μŒ)

CS401이 κ³Όλͺ© λͺ©λ‘μ— μ—†λ‹€λ©΄ (CS101κ³Ό CS301만):
  S = {CS101, CS301}
  S001: {CS101, CS301} 있음 β†’ βœ“
  S002: {CS101, CS301} 있음 β†’ βœ“
  기타: βœ—

  κ²°κ³Ό:
  β”Œβ”€β”€β”€β”€β”€β”€β”
  β”‚ sid  β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€
  β”‚ S001 β”‚
  β”‚ S002 β”‚
  β””β”€β”€β”€β”€β”€β”€β”˜

6. μΆ”κ°€ μ—°μ‚°

집계와 κ·Έλ£Ήν™”

κ·Έλ£Ήν™”/집계(Grouping/Aggregation) μ—°μ‚°μžλŠ” 집계 ν•¨μˆ˜λ₯Ό μ§€μ›ν•˜λ„λ‘ 관계 λŒ€μˆ˜λ₯Ό ν™•μž₯ν•©λ‹ˆλ‹€.

ν‘œκΈ°λ²•:   _{G1, G2, ..., Gn} G _{F1(A1), F2(A2), ..., Fk(Ak)} (R)

            λ˜λŠ” 더 일반적으둜:

            Ξ³_{G; F1(A1) AS name1, ...}(R)

μ—¬κΈ°μ„œ:
  G1, ..., Gn = κ·Έλ£Ήν™” 속성
  F1, ..., Fk = 집계 ν•¨μˆ˜ (COUNT, SUM, AVG, MIN, MAX)
  A1, ..., Ak = 집계할 속성

예제:

"학과별 학생 수"

Ξ³_{dept; COUNT(sid) AS count}(STUDENT)

κ²°κ³Ό:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ dept β”‚ count β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
β”‚ CS   β”‚ 3     β”‚
β”‚ EE   β”‚ 1     β”‚
β”‚ ME   β”‚ 1     β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜


"학과별 평균 κΈ‰μ—¬ (ꡐ수용)"

Ξ³_{dept; AVG(salary) AS avg_sal, COUNT(*) AS num}(INSTRUCTOR)

κ²°κ³Ό:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚ dept β”‚ avg_sal β”‚ num β”‚
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ CS   β”‚ 91500   β”‚ 2   β”‚
β”‚ EE   β”‚ 92000   β”‚ 1   β”‚
β”‚ MA   β”‚ 85000   β”‚ 1   β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜

λŒ€μž…

λŒ€μž…(Assignment) μ—°μ‚°μžλŠ” 쀑간 κ²°κ³Όλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€:

ν‘œκΈ°λ²•:   temp ← ν‘œν˜„μ‹

예제:
  CS_STUDENTS ← Οƒ_{dept='CS'}(STUDENT)
  CS_NAMES ← Ο€_{name}(CS_STUDENTS)

μ •λ ¬

ν‘œκΈ°λ²•:   Ο„_{A1 ASC, A2 DESC}(R)

μ°Έκ³ : 정렬은 집합이 μ•„λ‹Œ 리슀트λ₯Ό 생성. μ—„λ°€νžˆ λ§ν•˜λ©΄,
      순수 관계 λŒ€μˆ˜(μ§‘ν•©λ§Œ 생성)λ₯Ό λ„˜μ–΄κ°.

7. 쿼리 νŠΈλ¦¬μ™€ λŒ€μˆ˜μ  μ΅œμ ν™”

쿼리 트리

쿼리 트리(Query Tree) (λ˜λŠ” μ—°μ‚°μž 트리)λŠ” 관계 λŒ€μˆ˜ ν‘œν˜„μ‹μ„ 트리둜 ν‘œν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€: - 리프 λ…Έλ“œλŠ” κΈ°λ³Έ 관계 - λ‚΄λΆ€ λ…Έλ“œλŠ” 관계 λŒ€μˆ˜ μ—°μ‚° - λ£¨νŠΈλŠ” μ΅œμ’… κ²°κ³Ό 생성

예제: "CS301에 λ“±λ‘ν•œ CS ν•™μƒμ˜ 이름 μ°ΎκΈ°"

관계 λŒ€μˆ˜:
  Ο€_{name}(Οƒ_{dept='CS' AND cid='CS301'}(STUDENT β‹ˆ ENROLLMENT))

쿼리 트리:

              Ο€_{name}
                 β”‚
          Οƒ_{dept='CS' AND cid='CS301'}
                 β”‚
                β‹ˆ_{sid=sid}
               / \
          STUDENT  ENROLLMENT

λŒ€μˆ˜μ  μ΅œμ ν™”

쿼리 μ΅œμ ν™”κΈ°λŠ” λ™μΉ˜ κ·œμΉ™(equivalence rules)을 μ‚¬μš©ν•˜μ—¬ 쿼리 트리λ₯Ό λ³€ν™˜ν•΄ 더 효율적인 μ‹€ν–‰ κ³„νšμ„ μ°ΎμŠ΅λ‹ˆλ‹€.

μ£Όμš” λ™μΉ˜ κ·œμΉ™

κ·œμΉ™ 1: μ„ νƒμ˜ 연쇄(Cascade of Selection)

Οƒ_{c1 AND c2}(R) = Οƒ_{c1}(Οƒ_{c2}(R))

μ—°κ²°λœ 선택은 일련의 μ„ νƒμœΌλ‘œ 뢄리 κ°€λŠ₯.

κ·œμΉ™ 2: μ„ νƒμ˜ κ΅ν™˜λ²•μΉ™(Commutativity of Selection)

Οƒ_{c1}(Οƒ_{c2}(R)) = Οƒ_{c2}(Οƒ_{c1}(R))

μ„ νƒμ˜ μˆœμ„œλŠ” μ€‘μš”ν•˜μ§€ μ•ŠμŒ.

κ·œμΉ™ 3: ν”„λ‘œμ μ…˜μ˜ 연쇄(Cascade of Projection)

Ο€_{L1}(Ο€_{L2}(...Ο€_{Ln}(R)...)) = Ο€_{L1}(R)

κ°€μž₯ λ°”κΉ₯μͺ½ ν”„λ‘œμ μ…˜λ§Œ μ€‘μš” (L1 βŠ† L2 βŠ† ... βŠ† Ln인 경우).

κ·œμΉ™ 4: 선택과 ν”„λ‘œμ μ…˜μ˜ κ΅ν™˜(Commuting Selection with Projection)

선택 쑰건 cκ°€ L의 μ†μ„±λ§Œ ν¬ν•¨ν•˜λŠ” 경우:
  Ο€_L(Οƒ_c(R)) = Οƒ_c(Ο€_L(R))

κ·œμΉ™ 5: 쑰인의 κ΅ν™˜λ²•μΉ™(Commutativity of Join)

R β‹ˆ S = S β‹ˆ R
R Γ— S = S Γ— R

κ·œμΉ™ 6: 쑰인의 결합법칙(Associativity of Join)

(R β‹ˆ S) β‹ˆ T = R β‹ˆ (S β‹ˆ T)

κ·œμΉ™ 7: 쑰인을 ν†΅ν•œ 선택 λ°€μ–΄λ‚΄κΈ°(Pushing Selection Through Join)

쑰건 cκ°€ R의 μ†μ„±λ§Œ ν¬ν•¨ν•˜λŠ” 경우:
  Οƒ_c(R β‹ˆ S) = Οƒ_c(R) β‹ˆ S

이것이 κ°€μž₯ μ€‘μš”ν•œ μ΅œμ ν™” κ·œμΉ™!
쀑간 결과의 크기λ₯Ό μ€„μž„.

κ·œμΉ™ 8: μ§‘ν•© μ—°μ‚°μ˜ κ΅ν™˜λ²•μΉ™(Commutativity of Set Operations)

R βˆͺ S = S βˆͺ R
R ∩ S = S ∩ R
(ν•˜μ§€λ§Œ R βˆ’ S β‰  S βˆ’ R)

μ΅œμ ν™” 예제

원본 쿼리 트리 (μ΅œμ ν™” μ•ˆλ¨):

              Ο€_{name}
                 β”‚
          Οƒ_{dept='CS' AND cid='CS301'}
                 β”‚
                β‹ˆ_{sid=sid}
               / \
          STUDENT  ENROLLMENT
          (5 rows)  (10 rows)
          μΉ΄ν‹°μ…˜: ν•„ν„° μ „ 50 rows

μ΅œμ ν™”λœ 쿼리 트리 (선택 λ°€μ–΄λ‚΄κΈ°):

              Ο€_{name}
                 β”‚
                β‹ˆ_{sid=sid}
               / \
   Οƒ_{dept='CS'}  Οƒ_{cid='CS301'}
        |              |
     STUDENT       ENROLLMENT
     (β†’3 rows)     (β†’2 rows)
     쑰인: 6개 μ‘°ν•©, ~2개 λ§€μΉ­

μ΅œμ ν™”λœ 트리:
  1. λ¨Όμ € STUDENTλ₯Ό 3λͺ…μ˜ CS ν•™μƒμœΌλ‘œ 필터링
  2. λ¨Όμ € ENROLLMENTλ₯Ό 2개의 CS301 λ“±λ‘μœΌλ‘œ 필터링
  3. 5 Γ— 10 = 50 λŒ€μ‹  3 Γ— 2 = 6개 μ‘°ν•©λ§Œ 쑰인
  4. 쀑간 κ²°κ³Ό 크기 λŒ€ν­ κ°μ†Œ

νœ΄λ¦¬μŠ€ν‹± μ΅œμ ν™” κ·œμΉ™

1. 선택을 κ°€λŠ₯ν•œ ν•œ μ•„λž˜λ‘œ λ°€μ–΄λ‚΄κΈ°
   (μ΄ˆκΈ°μ— νŠœν”Œ 수 κ°μ†Œ)

2. ν”„λ‘œμ μ…˜μ„ κ°€λŠ₯ν•œ ν•œ μ•„λž˜λ‘œ λ°€μ–΄λ‚΄κΈ°
   (μ΄ˆκΈ°μ— 속성 수 κ°μ†Œ, 단 쑰인 속성 μœ μ§€)

3. κ°€μž₯ μ œν•œμ μΈ 선택을 λ¨Όμ € 선택
   (κ°€μž₯ λ§Žμ€ νŠœν”Œμ„ μ œκ±°ν•˜λŠ” 선택)

4. μΉ΄ν‹°μ…˜ κ³± ν”Όν•˜κΈ°
   (항상 μΉ΄ν‹°μ…˜ + 선택보닀 쑰인 μ„ ν˜Έ)

5. 쀑간 κ²°κ³Ό 크기λ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 쑰인 μˆœμ„œ 선택
   (κ°€μž₯ μ–΄λ €μš΄ μ΅œμ ν™” 문제 β€” μ’…μ’… NP-hard)

8. 관계 해석 (κ°„λ‹¨ν•œ μ†Œκ°œ)

관계 λŒ€μˆ˜κ°€ 절차적(procedural)(κ²°κ³Όλ₯Ό κ³„μ‚°ν•˜λŠ” 방법 μ§€μ •)인 반면, 관계 해석(Relational Calculus)은 선언적(declarative)(κ²°κ³Όκ°€ 무엇이어야 ν•˜λŠ”μ§€ μ§€μ •, 계산 방법은 μ•„λ‹˜)μž…λ‹ˆλ‹€.

νŠœν”Œ 관계 해석 (TRC)

TRCμ—μ„œ μΏΌλ¦¬λŠ” 관계에 λŒ€ν•œ νŠœν”Œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„λ©λ‹ˆλ‹€.

일반 ν˜•μ‹:
  { t | P(t) }

  "μˆ μ–΄ P(t)κ°€ 참인 λͺ¨λ“  νŠœν”Œ t의 μ§‘ν•©"

예제: "λͺ¨λ“  CS 학생 μ°ΎκΈ°"

  { t | t ∈ STUDENT ∧ t.dept = 'CS' }

  "deptκ°€ CS인 STUDENT의 νŠœν”Œ t μ§‘ν•©"

예제: "3ν•™λ…„ λ˜λŠ” 4ν•™λ…„ ν•™μƒμ˜ 이름과 ν•™κ³Ό μ°ΎκΈ°"

  { t.name, t.dept | t ∈ STUDENT ∧ (t.year = 3 ∨ t.year = 4) }

예제: "CS301에 λ“±λ‘ν•œ 학생 μ°ΎκΈ°"

  { t | t ∈ STUDENT ∧ βˆƒe ∈ ENROLLMENT(e.sid = t.sid ∧ e.cid = 'CS301') }

  "λ™μΌν•œ sidλ₯Ό κ°€μ§€κ³  cid = CS301인 등둝 eκ°€ μ‘΄μž¬ν•˜λŠ”
   STUDENT의 νŠœν”Œ t"

도메인 관계 해석 (DRC)

DRCμ—μ„œ λ³€μˆ˜λŠ” νŠœν”Œμ΄ μ•„λ‹Œ κ°œλ³„ κ°’(도메인)에 λŒ€ν•œ λ²”μœ„λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.

일반 ν˜•μ‹:
  { <x1, x2, ..., xn> | P(x1, x2, ..., xn) }

예제: "CS ν•™μƒμ˜ 이름 μ°ΎκΈ°"

  { <n> | βˆƒs, y, d (STUDENT(s, n, y, d) ∧ d = 'CS') }

  "(s, n, y, d)κ°€ STUDENT의 νŠœν”Œμ΄κ³  dκ°€ CS인
   κ°’ s, y, dκ°€ μ‘΄μž¬ν•˜λŠ” 이름 κ°’ n의 μ§‘ν•©"

λŒ€μˆ˜μ™€ ν•΄μ„μ˜ λ™μΉ˜μ„±

μ½”λ“œμ˜ 정리(Codd's Theorem) (1972): 관계 λŒ€μˆ˜μ™€ (μ•ˆμ „ν•œ) 관계 해석은 λ™μΌν•œ ν‘œν˜„λ ₯을 κ°€μ§‘λ‹ˆλ‹€. ν•˜λ‚˜λ‘œ ν‘œν˜„ν•  수 μžˆλŠ” λͺ¨λ“  μΏΌλ¦¬λŠ” λ‹€λ₯Έ κ²ƒμœΌλ‘œλ„ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                      β”‚
β”‚  관계 λŒ€μˆ˜(Relational Algebra)  ≑  μ•ˆμ „ν•œ νŠœν”Œ 관계 해석  β”‚
β”‚                      ≑  μ•ˆμ „ν•œ 도메인 관계 해석          β”‚
β”‚                      ≑  SQL (핡심)                   β”‚
β”‚                                                      β”‚
β”‚  쿼리 μ–Έμ–΄κ°€ 관계 λŒ€μˆ˜λ‘œ ν‘œν˜„ν•  수 μžˆλŠ” λͺ¨λ“  것을        β”‚
β”‚  ν‘œν˜„ν•  수 μžˆλ‹€λ©΄ "κ΄€κ³„μ μœΌλ‘œ μ™„μ „(relationally complete)"β”‚
β”‚                                                      β”‚
β”‚  SQL은 κ΄€κ³„μ μœΌλ‘œ μ™„μ „ (κ·Έ 이상 β€” 집계, μ •λ ¬, μž¬κ·€ λ“±)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ν‘œν˜„μ‹μ˜ μ•ˆμ „μ„±

관계 해석 ν‘œν˜„μ‹μ΄ μœ ν•œν•œ κ²°κ³Όλ₯Ό 보μž₯ν•˜λ©΄ μ•ˆμ „(safe)ν•©λ‹ˆλ‹€. μ•ˆμ „ν•˜μ§€ μ•Šμ€ ν‘œν˜„μ‹μ€ λ¬΄ν•œν•œ κ²°κ³Όλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€:

μ•ˆμ „ν•˜μ§€ μ•ŠμŒ:  { t | Β¬(t ∈ STUDENT) }
         "STUDENT에 μ—†λŠ” λͺ¨λ“  νŠœν”Œ" β€” λ¬΄ν•œ!

μ•ˆμ „ν•¨:    { t | t ∈ STUDENT ∧ Β¬(βˆƒe ∈ ENROLLMENT(e.sid = t.sid)) }
         "μ–΄λ–€ κ³Όλͺ©μ—λ„ λ“±λ‘ν•˜μ§€ μ•Šμ€ 학생" β€” μœ ν•œ κ²°κ³Ό

9. SQL과의 λ™μΉ˜μ„±

λͺ¨λ“  관계 λŒ€μˆ˜ ν‘œν˜„μ‹μ€ λ™μΉ˜μΈ SQL이 μžˆμŠ΅λ‹ˆλ‹€. 이 λŒ€μ‘ 관계λ₯Ό μ΄ν•΄ν•˜λ©΄ SQL 쿼리 μž‘μ„± 및 μ΅œμ ν™”μ— 도움이 λ©λ‹ˆλ‹€.

연산별 λ§€ν•‘

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 관계 λŒ€μˆ˜            β”‚ SQL λ™μΉ˜                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Οƒ_{c}(R)           β”‚ SELECT * FROM R WHERE c                  β”‚
β”‚ Ο€_{A,B}(R)         β”‚ SELECT DISTINCT A, B FROM R              β”‚
β”‚ ρ_{S}(R)           β”‚ R AS S  (FROM μ ˆμ—μ„œ)                    β”‚
β”‚ R βˆͺ S              β”‚ SELECT * FROM R UNION SELECT * FROM S    β”‚
β”‚ R ∩ S              β”‚ SELECT * FROM R INTERSECT SELECT * FROM Sβ”‚
β”‚ R βˆ’ S              β”‚ SELECT * FROM R EXCEPT SELECT * FROM S   β”‚
β”‚ R Γ— S              β”‚ SELECT * FROM R, S  (λ˜λŠ” CROSS JOIN)     β”‚
β”‚ R β‹ˆ_{c} S          β”‚ SELECT * FROM R JOIN S ON c              β”‚
β”‚ R β‹ˆ S              β”‚ SELECT * FROM R NATURAL JOIN S           β”‚
β”‚ R βŸ• S              β”‚ SELECT * FROM R LEFT OUTER JOIN S ON ... β”‚
β”‚ R Γ· S              β”‚ (NOT EXISTS + 상관 λΆ€μ§ˆμ˜ ν•„μš”)            β”‚
β”‚ Ξ³_{G;F(A)}(R)      β”‚ SELECT G, F(A) FROM R GROUP BY G        β”‚
β”‚ Ο„_{A}(R)           β”‚ SELECT * FROM R ORDER BY A               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μƒμ„Έν•œ SQL λ™μΉ˜

선택:

Οƒ_{dept='CS' AND year>=3}(STUDENT)

SELECT *
FROM student
WHERE dept = 'CS' AND year >= 3;

ν”„λ‘œμ μ…˜:

Ο€_{name, dept}(STUDENT)

SELECT DISTINCT name, dept
FROM student;

μ°Έκ³ : SQL은 기본적으둜 쀑볡을 μ œκ±°ν•˜μ§€ μ•ŠμŒ.
      관계 λŒ€μˆ˜μ˜ μ§‘ν•© 의미둠과 μΌμΉ˜μ‹œν‚€λ €λ©΄ DISTINCTλ₯Ό μ‚¬μš©ν•΄μ•Ό 함.

μžμ—° 쑰인:

STUDENT β‹ˆ ENROLLMENT

-- 방법 1: NATURAL JOIN (λͺ¨λ“  곡톡 μ—΄μ—μ„œ λ§€μΉ­)
SELECT * FROM student NATURAL JOIN enrollment;

-- 방법 2: λͺ…μ‹œμ  JOIN (더 μ•ˆμ „ β€” μ–΄λ–€ 열이 λ§€μΉ­λ˜λŠ”μ§€ μ œμ–΄)
SELECT s.sid, s.name, s.year, s.dept, e.cid, e.grade
FROM student s
JOIN enrollment e ON s.sid = e.sid;

λ‚˜λˆ—μ…ˆ (SQL둜 ν‘œν˜„ν•˜κΈ° κ°€μž₯ 어렀움):

R Γ· S  =  "S의 λͺ¨λ“  νŠœν”Œκ³Ό μ—°κ΄€λœ R의 νŠœν”Œ μ°ΎκΈ°"

-- "λͺ¨λ“  CS κ³Όλͺ©μ— λ“±λ‘ν•œ 학생 μ°ΎκΈ°"
SELECT DISTINCT e.sid
FROM enrollment e
WHERE NOT EXISTS (
    SELECT c.cid
    FROM course c
    WHERE c.dept = 'CS'
    AND NOT EXISTS (
        SELECT 1
        FROM enrollment e2
        WHERE e2.sid = e.sid
        AND e2.cid = c.cid
    )
);

-- COUNTλ₯Ό μ‚¬μš©ν•œ λŒ€μ•ˆ:
SELECT e.sid
FROM enrollment e
JOIN course c ON e.cid = c.cid
WHERE c.dept = 'CS'
GROUP BY e.sid
HAVING COUNT(DISTINCT e.cid) = (
    SELECT COUNT(*) FROM course WHERE dept = 'CS'
);

μ‘°ν•© 예제:

"μ–΄λ–€ κ³Όλͺ©μ—μ„œλ“  Aλ₯Ό 받은 ν•™μƒμ˜ 이름 μ°ΎκΈ°"

관계 λŒ€μˆ˜:
  Ο€_{name}(Οƒ_{grade='A'}(STUDENT β‹ˆ ENROLLMENT))

SQL:
  SELECT DISTINCT s.name
  FROM student s
  JOIN enrollment e ON s.sid = e.sid
  WHERE e.grade = 'A';

10. μ™„μ „ν•œ μž‘μ—… 예제

예제 1: 닀단계 쿼리

쿼리: "CS ν•™κ³Όκ°€ κ°€λ₯΄μΉ˜λŠ” κ³Όλͺ©μ— λ“±λ‘ν–ˆμ§€λ§Œ CS 전곡이 μ•„λ‹Œ ν•™μƒμ˜ 이름과 ν•™κ³Ό μ°ΎκΈ°."

관계 λŒ€μˆ˜:

  CS_COURSES ← Οƒ_{dept='CS'}(COURSE)
  CS_ENROLLED ← ENROLLMENT β‹ˆ_{cid} CS_COURSES
  NON_CS_STUDENTS ← Οƒ_{deptβ‰ 'CS'}(STUDENT)
  RESULT ← Ο€_{name, dept}(NON_CS_STUDENTS β‹ˆ_{sid} CS_ENROLLED)

단계별:

1. CS_COURSES = Οƒ_{dept='CS'}(COURSE)
   β†’ {CS101, CS301, CS401}

2. CS_ENROLLED = Ο€_{sid}(ENROLLMENT β‹ˆ CS_COURSES)
   β†’ {S001, S002, S003, S004, S005} (CS101/CS301/CS401을 μˆ˜κ°•ν•œ λͺ¨λ‘)

3. NON_CS_STUDENTS = σ_{dept≠'CS'}(STUDENT)
   β†’ {S003/Carol/EE, S004/Dave/ME}

4. RESULT = Ο€_{name, dept}(NON_CS_STUDENTS β‹ˆ CS_ENROLLED)
   β†’ {(Carol, EE), (Dave, ME)}

SQL:
  SELECT DISTINCT s.name, s.dept
  FROM student s
  JOIN enrollment e ON s.sid = e.sid
  JOIN course c ON e.cid = c.cid
  WHERE c.dept = 'CS' AND s.dept <> 'CS';

예제 2: λ‚˜λˆ—μ…ˆ 쿼리

쿼리: "학생 S001이 μˆ˜κ°•ν•œ λͺ¨λ“  κ³Όλͺ©μ„ μˆ˜κ°•ν•œ 학생 μ°ΎκΈ°."

관계 λŒ€μˆ˜:

  S001_COURSES ← Ο€_{cid}(Οƒ_{sid='S001'}(ENROLLMENT))
  ALL_ENROLLMENTS ← Ο€_{sid, cid}(ENROLLMENT)
  RESULT ← ALL_ENROLLMENTS Γ· S001_COURSES

단계별:

1. S001_COURSES = {CS101, CS301, MA101}

2. 각 학생 확인:
   S001: {CS101, CS301, MA101} βŠ‡ {CS101, CS301, MA101} β†’ βœ“
   S002: {CS101, CS301}        βŠ‡ {CS101, CS301, MA101} β†’ βœ— (MA101 빠짐)
   S003: {EE201, CS101}        βŠ‡ {CS101, CS301, MA101} β†’ βœ—
   S004: {CS101}               βŠ‡ {CS101, CS301, MA101} β†’ βœ—
   S005: {CS101, MA101}        βŠ‡ {CS101, CS301, MA101} β†’ βœ— (CS301 빠짐)

3. RESULT = {S001}

SQL:
  SELECT e.sid
  FROM enrollment e
  WHERE e.cid IN (
      SELECT cid FROM enrollment WHERE sid = 'S001'
  )
  GROUP BY e.sid
  HAVING COUNT(DISTINCT e.cid) = (
      SELECT COUNT(DISTINCT cid) FROM enrollment WHERE sid = 'S001'
  );

예제 3: μ™ΈλΆ€ 쑰인

쿼리: "등둝이 μ—†λŠ” 학생을 ν¬ν•¨ν•˜μ—¬ λͺ¨λ“  학생과 κ·Έλ“€μ˜ 등둝 수 λ‚˜μ—΄."

관계 λŒ€μˆ˜:

  JOINED ← STUDENT βŸ• ENROLLMENT       (sidμ—μ„œ μ™Όμͺ½ μ™ΈλΆ€ 쑰인)
  RESULT ← Ξ³_{sid, name; COUNT(cid) AS num_courses}(JOINED)

Dave (S004)κ°€ 등둝이 μ—†λ‹€λ©΄:

SQL:
  SELECT s.sid, s.name, COUNT(e.cid) AS num_courses
  FROM student s
  LEFT OUTER JOIN enrollment e ON s.sid = e.sid
  GROUP BY s.sid, s.name
  ORDER BY num_courses DESC;

κ²°κ³Ό:
  β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ sid  β”‚ name  β”‚ num_courses β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ S001 β”‚ Alice β”‚ 3           β”‚
  β”‚ S002 β”‚ Bob   β”‚ 2           β”‚
  β”‚ S003 β”‚ Carol β”‚ 2           β”‚
  β”‚ S005 β”‚ Eve   β”‚ 2           β”‚
  β”‚ S004 β”‚ Dave  β”‚ 0           β”‚  ← LEFT OUTER JOIN으둜 보쑴됨
  β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

11. μ—°μŠ΅ 문제

κΈ°λ³Έ μ—°μ‚°

μ—°μŠ΅ 문제 3.1: μƒ˜ν”Œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μŒμ— λŒ€ν•œ 관계 λŒ€μˆ˜ ν‘œν˜„μ‹μ„ μž‘μ„±ν•˜μ„Έμš”:

  • (a) 2ν•™λ…„ λ˜λŠ” 3ν•™λ…„μ˜ λͺ¨λ“  학생
  • (b) 4학점 μ΄μƒμ˜ κ³Όλͺ© 제λͺ©
  • (c) EE201에 λ“±λ‘ν•œ 학생 ID
  • (d) CS ν•™κ³Όκ°€ μ•„λ‹Œ ν•™μƒμ˜ 이름

μ—°μŠ΅ 문제 3.2: λ‹€μŒ ν‘œν˜„μ‹μ„ λ‹¨κ³„λ³„λ‘œ ν‰κ°€ν•˜κ³ , 쀑간 κ²°κ³Όλ₯Ό λ³΄μ—¬μ£Όμ„Έμš”:

  • (a) Ο€_{name}(Οƒ_{year > 2}(STUDENT))
  • (b) Ο€_{sid}(Οƒ_{grade='A'}(ENROLLMENT)) ∩ Ο€_{sid}(Οƒ_{dept='CS'}(STUDENT))
  • (c) STUDENT β‹ˆ (Οƒ_{cid='CS301'}(ENROLLMENT))

쑰인 μ—°μ‚°

μ—°μŠ΅ 문제 3.3: λ‹€μŒ 각각에 λŒ€ν•΄ 관계 λŒ€μˆ˜ ν‘œν˜„μ‹κ³Ό λ™μΉ˜ SQL을 μž‘μ„±ν•˜μ„Έμš”:

  • (a) "Database Theory"에 λ“±λ‘ν•œ ν•™μƒμ˜ 이름 μ°ΎκΈ°
  • (b) A 학점을 받은 학생이 μ΅œμ†Œ ν•œ λͺ… μžˆλŠ” κ³Όλͺ© 제λͺ© μ°ΎκΈ°
  • (c) μžμ‹ μ˜ ν•™κ³Ό μ™Έμ˜ κ³Όλͺ©μ— λ“±λ‘ν•œ 학생 μ°ΎκΈ°
  • (d) μ΅œμ†Œ ν•œ κ³Όλͺ©μ„ κ³΅μœ ν•˜λŠ” 학생 쌍 μ°ΎκΈ°

μ—°μŠ΅ 문제 3.4: μƒ˜ν”Œ λ°μ΄ν„°μ—μ„œ λ‹€μŒ μ„Έ 쿼리 결과의 차이λ₯Ό μ„€λͺ…ν•˜μ„Έμš”:

Q1: STUDENT β‹ˆ ENROLLMENT
Q2: STUDENT βŸ• ENROLLMENT
Q3: STUDENT Γ— ENROLLMENT

각각 λͺ‡ 개의 νŠœν”Œμ„ μƒμ„±ν•˜λ‚˜μš”? Q2μ—λŠ” λ‚˜νƒ€λ‚˜μ§€λ§Œ Q1μ—λŠ” λ‚˜νƒ€λ‚˜μ§€ μ•ŠλŠ” νŠœν”Œμ€?

λ‚˜λˆ—μ…ˆ

μ—°μŠ΅ 문제 3.5: λ‚˜λˆ—μ…ˆμ„ μ‚¬μš©ν•˜μ—¬ λ‹€μŒμ— λŒ€ν•œ 관계 λŒ€μˆ˜ ν‘œν˜„μ‹μ„ μž‘μ„±ν•˜μ„Έμš”:

  • (a) λͺ¨λ“  3학점 κ³Όλͺ©μ— λ“±λ‘ν•œ 학생
  • (b) Bob (S002)이 μˆ˜κ°•ν•œ λͺ¨λ“  κ³Όλͺ©μ„ μˆ˜κ°•ν•œ 학생

단계별 평가λ₯Ό λ³΄μ—¬μ£Όμ„Έμš”.

μ—°μŠ΅ 문제 3.6: μ—°μŠ΅ 문제 3.5의 각 λ‚˜λˆ—μ…ˆ 쿼리λ₯Ό λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ SQL둜 ν‘œν˜„ν•˜μ„Έμš”: - (i) 이쀑 NOT EXISTS - (ii) HAVING COUNTλ₯Ό μ‚¬μš©ν•œ GROUP BY

μ΅œμ ν™”

μ—°μŠ΅ 문제 3.7: λ‹€μŒ 쿼리가 μ£Όμ–΄μ‘Œμ„ λ•Œ:

Ο€_{name}(Οƒ_{credits=3 AND grade='A'}(STUDENT β‹ˆ ENROLLMENT β‹ˆ COURSE))
  • (a) 초기(μ΅œμ ν™” μ•ˆλœ) 쿼리 트리 그리기
  • (b) λŒ€μˆ˜μ  μ΅œμ ν™” κ·œμΉ™μ„ μ μš©ν•˜μ—¬ μ΅œμ ν™”λœ 쿼리 트리 생성
  • (c) μ–΄λ–€ κ·œμΉ™μ„ μ μš©ν–ˆλŠ”μ§€, μ™œ μ΅œμ ν™”λœ νŠΈλ¦¬κ°€ 더 λ‚˜μ€μ§€ μ„€λͺ…
  • (d) 쀑간 κ²°κ³Ό 크기의 κ°μ†Œ μΆ”μ •

μ—°μŠ΅ 문제 3.8: λ‹€μŒ λ™μΉ˜λ₯Ό 증λͺ…ν•˜κ±°λ‚˜ λ°˜μ¦ν•˜μ„Έμš”:

  • (a) Οƒ_{c1}(R βˆͺ S) = Οƒ_{c1}(R) βˆͺ Οƒ_{c1}(S)
  • (b) Οƒ_{c1}(R βˆ’ S) = Οƒ_{c1}(R) βˆ’ Οƒ_{c1}(S)
  • (c) Ο€_A(R βˆͺ S) = Ο€_A(R) βˆͺ Ο€_A(S)
  • (d) Οƒ_{c1}(R Γ— S) = Οƒ_{c1}(R) Γ— S (c1이 R의 μ†μ„±λ§Œ ν¬ν•¨ν•˜λŠ” 경우)

관계 해석

μ—°μŠ΅ 문제 3.9: λ‹€μŒμ„ νŠœν”Œ 관계 해석(TRC)으둜 ν‘œν˜„ν•˜μ„Έμš”:

  • (a) CS ν•™κ³Ό ν•™μƒμ˜ 이름
  • (b) μ΅œμ†Œ 두 κ³Όλͺ©μ— λ“±λ‘ν•œ 학생
  • (c) λ“±λ‘ν•œ 학생이 μ—†λŠ” κ³Όλͺ©
  • (d) CS ν•™κ³Όκ°€ μ œκ³΅ν•˜λŠ” λͺ¨λ“  κ³Όλͺ©μ— λ“±λ‘ν•œ 학생

μ—°μŠ΅ 문제 3.10: λ‹€μŒ TRC ν‘œν˜„μ‹ 쀑 μ–΄λŠ 것이 μ•ˆμ „ν•œμ§€ κ²°μ •ν•˜μ„Έμš”. μ•ˆμ „ν•˜μ§€ μ•Šλ‹€λ©΄ κ·Έ 이유λ₯Ό μ„€λͺ…ν•˜κ³  μ•ˆμ „ν•œ λ™μΉ˜λ₯Ό μ œκ³΅ν•˜μ„Έμš”:

  • (a) { t | Β¬(t ∈ STUDENT) }
  • (b) { t.name | t ∈ STUDENT ∧ t.gpa > 3.5 }
  • (c) { <x, y> | βˆƒt ∈ STUDENT(t.sid = x ∧ t.name = y) }
  • (d) { t | t.salary > 100000 }

도전 문제

μ—°μŠ΅ 문제 3.11: 관계 R(A, B, C)κ°€ λ‹€μŒ νŠœν”Œμ„ ν¬ν•¨ν•©λ‹ˆλ‹€:

{(a1, b1, c1), (a1, b2, c1), (a1, b2, c2), (a2, b1, c1), (a2, b1, c2)}

관계 S(B, C)λŠ”: {(b1, c1), (b1, c2)}λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€

R Γ· Sλ₯Ό λ‹¨κ³„λ³„λ‘œ κ³„μ‚°ν•˜μ„Έμš”. 결과의 각 νŠœν”Œμ΄ S의 λͺ¨λ“  νŠœν”Œκ³Ό μ—°κ΄€λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ 닡을 κ²€μ¦ν•˜μ„Έμš”.

μ—°μŠ΅ 문제 3.12: λ‹€μŒμ— λŒ€ν•œ 단일 관계 λŒ€μˆ˜ ν‘œν˜„μ‹(λŒ€μž… μ—†μŒ) μž‘μ„±:

"평균 ꡐ수 κΈ‰μ—¬κ°€ κ°€μž₯ 높은 ν•™κ³Ό μ°ΎκΈ°."

힌트: 집계와 비ꡐ νŒ¨ν„΄μ΄ ν•„μš”ν•©λ‹ˆλ‹€.


이전: 관계 λͺ¨λΈ | λ‹€μŒ: ER λͺ¨λΈλ§

to navigate between lessons