DBMS/λ°μ΄ν„°λ² μ΄μŠ€ 이둠

πŸ“‹ 관계 λŒ€μˆ˜ & 관계 해석 ν‘œν˜„λ²• πŸ’― 총정리

인파_ 2023. 4. 21. 10:41

κ΄€κ³„λŒ€μˆ˜-관계해석

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

관계 λŒ€μˆ˜μ‹μ΄λž€ κΈ°μ‘΄ λ¦΄λ ˆμ΄μ…˜(ν…Œμ΄λΈ”)λ“€λ‘œλΆ€ν„° μƒˆλ‘œμš΄ λ¦΄λ ˆμ΄μ…˜μ„ μƒμ„±ν•˜λŠ” 절차적 μ–Έμ–΄ 문법이라고 보면 λœλ‹€. λ¦΄λ ˆμ΄μ…˜μ— λŒ€ν•΄ 기본적인 μ—°μ‚°μžλ“€μ„ μ μš©ν•˜μ—¬ 보닀 λ³΅μž‘ν•œ 관계 λŒ€μˆ˜μ‹μ„ 점차적으둜 λ§Œλ“€ 수 μžˆλ‹€.

Relation Algebra

μ‰½κ²Œ 생각해 μš°λ¦¬κ°€ 숫자λ₯Ό λ”ν•˜κ±°λ‚˜ λ‚˜λˆ„μ–΄ μ›ν•˜λŠ” 수λ₯Ό λ„μΆœν•˜λ“―μ΄, λ¦΄λ ˆμ΄μ…˜μ„ 관계 λŒ€μˆ˜λΌλŠ” μ „μš© μ—°μ‚°μžλ₯Ό 톡해 λ”ν•˜κ±°λ‚˜ κ³±ν•΄ μ›ν•˜λŠ” λ¦΄λ ˆμ΄μ…˜μ„ λ„μΆœν•˜λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜λ©΄ λœλ‹€.

관계 μ—°μ‚°μžλ“€μ€ λ¦΄λ ˆμ΄μ…˜μ˜ νŠΉμ„±μ— 따라 일반 집합 μ—°μ‚°κ³Ό 순수 관계 μ—°μ‚°μœΌλ‘œ λ‚˜λ‰˜λ©°, 각각의 μ—°μ‚° κ²°κ³ΌλŠ” 또 λ‹€λ₯Έ 관계 λŒ€μˆ˜μ‹μ˜ μž…λ ₯으둜 μ‚¬μš©λ  수 μžˆλ‹€. 

Relation Algebra

μ΄λ ‡κ²Œ 관계 λŒ€μˆ˜μ‹μ€ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 데이터λ₯Ό μ–»κΈ° μœ„ν•œ 절차λ₯Ό μ‹œμŠ€ν…œμ— λͺ…μ„Έν•˜λŠ” 데이터 μ–Έμ–΄λ‘œμ„œ 관계 데이터 λͺ¨λΈμ—μ„œμ˜ λ¦΄λ ˆμ΄μ…˜μ„ μ‘°μž‘ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ μ—°μ‚° 쀑 ν•˜λ‚˜μ΄λ‹€. κ·Έλž˜μ„œ 관계 λŒ€μˆ˜λŠ” μƒμš© 관계 DBMSλ“€μ—μ„œ 널리 μ‚¬μš©λ˜λŠ” SQL의 이둠적인 κΈ°μ΄ˆμ΄κΈ°λ„ ν•˜λ‹€. λ˜ν•œ SQL을 κ΅¬ν˜„ν•˜κ³  μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ DBMS의 λ‚΄λΆ€ μ–Έμ–΄λ‘œμ„œλ„ μ‚¬μš©λœλ‹€.


관계 λŒ€μˆ˜μ˜ 8λŒ€ μ—°μ‚°μž

8λŒ€ 관계 μ—°μ‚°μžλž€, κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” 8가지 기본적인 μ—°μ‚°μžλ“€μ„ μ˜λ―Έν•œλ‹€. μ΄λŸ¬ν•œ μ—°μ‚°μžλ“€μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 기초적인 연산듀이며, κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 맀우 μ€‘μš”ν•œ κ°œλ…μ΄λ‹€. 관계 μ—°μ‚°μžλ“€μ„ 잘 μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•¨μœΌλ‘œμ¨, λ°μ΄ν„°λ² μ΄μŠ€μ˜ 질의λ₯Ό 보닀 효율적으둜 μˆ˜ν–‰ν•  수 있기 λ•Œλ¬Έμ΄λ‹€.

  1. μ…€λ ‰μ…˜ : ν…Œμ΄λΈ”μ—μ„œ ν•œ 개 끄집어낸닀
  2. ν”„λ‘œμ μ…˜ : 학생 ν…Œμ΄λΈ”μ—μ„œ νŠΉμ •ν•œ ν•™λ²ˆ μ΄λ¦„λ§Œ 좜λ ₯.
  3. 합집합 : union κ²ΉμΉ˜λŠ” κ±Έ μ œμ™Έν•˜κ³  ν…Œμ΄λΈ” ν•©
  4. ꡐ집합 : κ²ΉμΉ˜λŠ” κ²ƒλ§Œ ν…Œμ΄λΈ”
  5. 차집합 : A - B ν•œ κ²°κ³Ό ν…Œμ΄λΈ”
  6. μΉ΄ν‹°μ…˜ κ³± : λ‚˜μ˜¬μˆ˜ μžˆλŠ” μ‘°ν•© 경우의 수
  7. 쑰인 : κ²°ν•©
  8. λ””λΉ„μ „ : λΆ„ν• 

κ΄€κ³„λŒ€μˆ˜-관계해석


μ…€λ ‰μ…˜ μ—°μ‚°μž σ

μ…€λ ‰μ…˜

  • μ›ν•˜λŠ” 데이터λ₯Ό μˆ˜ν‰μ μœΌλ‘œ λ„μΆœν•¨
  • σ (sigma)둜 μ—°μ‚°μžλ₯Ό ν‘œν˜„

σ DNO=3 (EMPLOYEE) : EMPLOYEE ν…Œμ΄λΈ”μ—μ„œ DNOκ°€ 3인 행을 λ„μΆœ

μ…€λ ‰μ…˜


ν”„λ‘œμ μ…˜ μ—°μ‚°μž Π

ν”„λ‘œμ μ…˜

  • μ›ν•˜λŠ” 데이터λ₯Ό 수직적으둜 λ„μΆœν•¨
  • Π (pi)둜 μ—°μ‚°μžλ₯Ό ν‘œν˜„
  • 보톡 μ…€λ ‰μ…˜μ˜ κ²°κ³Ό λ¦΄λ ˆμ΄μ…˜μ—λŠ” 쀑볡 νŠœν”Œμ΄ μ‘΄μž¬ν•  수 μ—†μ§€λ§Œ, ν”„λ‘œμ μ…˜ μ—°μ‚°μ˜ κ²°κ³Ό λ¦΄λ ˆμ΄μ…˜μ—λŠ” μ€‘λ³΅λœ νŠœν”Œλ“€μ΄ μ‘΄μž¬ν•  수 μžˆλ‹€. λ”°λΌμ„œ λ„μΆœλœ λ¦΄λ ˆμ΄μ…˜μ— 쀑볡이 λ“€μ–΄μžˆλ‹€λ©΄ 이 쀑볡은 μžλ™μœΌλ‘œ μ œκ±°λœλ‹€.

Π TITLE(EMPLOYEE) : EMPLOYEE ν…Œμ΄λΈ”μ—μ„œ TITLE 열을 λ„μΆœ

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


합집합 μ—°μ‚°μž

합집합

  • 두 λ¦΄λ ˆμ΄μ…˜μ˜ νŠœν”Œλ“€μ„ ν•©μΉ¨
  • ν•©μΉœ κ²°κ³Ό λ¦΄λ ˆμ΄μ…˜μ—μ„œ μ€‘λ³΅λœ νˆ¬ν”Œλ“€μ€ μ œμ™Έλ¨
  • ∪ 둜 μ—°μ‚°μžλ₯Ό ν‘œν˜„
  • 합집합은 합집합 ν˜Έν™˜ 쑰건이 λ§žμ•„μ•Όλ§Œ μ‹€ν–‰ν•  수 μžˆλ‹€.

합집합

합집합 ν˜Έν™˜ (union compatible)
μ„œλ‘œ λ‹€λ₯Έ ν…Œμ΄λΈ”μ— union ν•˜λŠ”λ° μžˆμ–΄, κ°―μˆ˜κ°€ λ‹€λ₯΄κ±°λ‚˜ 도메인이 λ‹€λ₯΄λ©΄ μ•ˆλœλ‹€. 이 κ·œμΉ™μ€ 합집합, 차집합, ꡐ집합에 λͺ¨λ‘ μ μš©λœλ‹€.
예λ₯Όλ“€μ–΄, μ•„λž˜μ˜ EMPLOYEE λ¦΄λ ˆμ΄μ…˜κ³Ό DEPARTMENT λ¦΄λ ˆμ΄μ…˜μ€ 기본적으둜 μ–΄νŠΈλ¦¬λ·°νŠΈ μˆ˜κ°€ λ‹€λ₯΄λ―€λ‘œ 합집합 ν˜Έν™˜ 쑰건에 λ§žμ§€ μ•ŠλŠ”λ‹€κ³  생각할 수 μžˆλ‹€.
union compatible

κ·ΈλŸ¬λ‚˜ EMPLOYEE λ¦΄λ ˆμ΄μ…˜μ—μ„œ DNOλ₯Ό ν”„λ‘œμ μ…˜ν•œ κ²°κ³Ό λ¦΄λ ˆμ΄μ…˜κ³Ό DEPARTMENT κ΄€κ³„μ—μ„œ DEPTNOλ₯Ό ν”„λ‘œμ μ…˜ν•œ κ²°κ³Ό λ¦΄λ ˆμ΄μ…˜μ€ μ• νŠΈλ¦¬λ·°νŠΈμˆ˜κ°€ κ°™μœΌλ©° DEPTNO와 DNO 도메인이 κ°™κΈ° λ•Œλ¬Έμ—, λ”°λΌμ„œ 두 λ¦΄λ ˆμ΄μ…˜μ€ 결과적으둜 합집합 ν˜Έν™˜ 쑰건이 λΆ€ν•©λœλ‹€.

 

합집합
합집합
김창섭이 μ†ν•œ λΆ€μ„œμ˜ λΆ€μ„œλ²ˆν˜Έ + 개발 λΆ€μ„œμ˜ λΆ€μ„œλ²ˆν˜Έ


ꡐ집합 μ—°μ‚°μž

ꡐ집합

  • 두 λ¦΄λ ˆμ΄μ…˜μ˜ νŠœν”Œλ“€μ˜ κ²ΉμΉ˜λŠ” λΆ€λΆ„λ§Œμ„ λ„μΆœ
  • ∩둜 μ—°μ‚°μžλ₯Ό ν‘œν˜„

ꡐ집합

 

ꡐ집합

 

ꡐ집합
ꡐ집합


차집합 μ—°μ‚°μž -

차집합

  • 두 λ¦΄λ ˆμ΄μ…˜μ˜ νŠœν”Œλ“€μ˜ κ²ΉμΉ˜μ§€ μ•ŠλŠ” λΆ€λΆ„λ§Œμ„ λ„μΆœ
  • -둜 μ—°μ‚°μžλ₯Ό ν‘œν˜„

차집합
차집합

 

차집합
차집합
차집합


μΉ΄ν‹°μ…˜ κ³± μ—°μ‚°μž ×

μΉ΄ν‹°μ…˜ κ³±

  • 두 λ¦΄λ ˆμ΄μ…˜(ν…Œμ΄λΈ”) μ—μ„œ κ°€λŠ₯ν•œ λͺ¨λ“  쑰합을 λ§Œλ“€μ–΄μ£ΌλŠ” μ—°μ‚°μž
  • 두 ν…Œμ΄λΈ”λ‘œ λ§Œλ“€ 수 μžˆλŠ” λͺ¨λ“  경우의 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 전체 집합을 λ„μΆœ
  • μΉ΄λ””μ…˜ κ³±ν•΄μ„œ λ‚˜μ˜€λŠ”κ²Œ 값이 크면 μ˜€λ²„ν—€λ“œκ°€ λ„ˆλ¬΄ 컀지기 λ•Œλ¬Έμ— μ‹€μ œλ‘œλŠ” μΉ΄ν‹°μ…˜ κ³± μ—°μ‚°μžλŠ” μ‚¬μš©ν•˜μ§€μ•Šκ³  λ’€μ—μ„œ 배울 쑰인(join) μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€.
  • ×둜 μ—°μ‚°μžλ₯Ό ν‘œν˜„

μΉ΄ν‹°μ…˜ κ³±


λ””λΉ„μ „ μ—°μ‚°μž ÷

λ””λΉ„μ „

  • ν•œ ν…Œμ΄λΈ”μ—μ„œ λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  κ°’을 κ°€μ§€κ³  μžˆλŠ” ν–‰λ“€μ„ μ°Ύμ•„μ£ΌλŠ” μ—°μ‚°μž
  • 'λͺ¨λ“  ~에 λŒ€ν•΄ ~ν•˜λŠ”' ν˜•νƒœμ˜ μ§ˆμ˜μ— μ‚¬μš©λ  수 있음
  • 디비전은 λ‚˜λˆ„λŠ” ν…Œμ΄λΈ”μ˜ μ—΄μ˜ 개수만큼 κ²°κ³Ό ν…Œμ΄λΈ”μ˜ μ—΄μ˜ κ°œμˆ˜κ°€ μ€„μ–΄λ“€κ²Œ λœλ‹€
  • ÷둜 μ—°μ‚°μžλ₯Ό ν‘œν˜„

λ””λΉ„μ „λ””λΉ„μ „


쑰인 μ—°μ‚°μž β‹ˆ

  • 두 개의 λ¦΄λ ˆμ΄μ…˜μœΌλ‘œλΆ€ν„° μ—°κ΄€λœ νˆ¬ν”Œλ“€μ„ κ²°ν•©ν•˜λŠ” μ—°μ‚°μž
  • β‹ˆλ‘œ μ—°μ‚°μžλ₯Ό ν‘œν˜„
  • 쑰인 μ—°μ‚°μžλŠ” λ‹€μŒκ³Ό 같이 μ—°μ‚° 방식에 따라 μ—¬λŸ¬ 쑰인으둜 λ‚˜λ‰œλ‹€ 
    • 세타 쑰인(theta join)
    • 동등 쑰인(equi join)
    • μžμ—° 쑰인(natural join)
    • μ™ΈλΆ€ 쑰인(outer join)
    • μ„Έλ―Έ 쑰인(semi join)

​

세타 쑰인 & 동등 쑰인

  • 세타 쑰인은 두 λ¦΄λ ˆμ΄μ…˜μ—μ„œ κ³΅ν†΅λœ μ• νŠΈλ¦¬λ·°νŠΈλ₯Ό κΈ°μ€€μœΌλ‘œ 비ꡐ μ—°μ‚°μž(=,<>,<=,<,>=,>)λ₯Ό μ‚¬μš©ν•˜μ—¬ 쑰건을 λ§Œμ‘±ν•˜λŠ” νŠœν”Œλ“€μ„ κ²°ν•©ν•˜λŠ” 것이닀.
  • 동등 쑰인은 세타 쑰인 μ€‘μ—μ„œ 비ꡐ μ—°μ‚°μžκ°€ =인 쑰인이닀.
    즉, 두 λ¦΄λ ˆμ΄μ…˜μ—μ„œ κ³΅ν†΅λœ μ• νŠΈλ¦¬λ·°νŠΈμ˜ 값이 같은 νŠœν”Œλ“€μ„ κ²°ν•©ν•˜λŠ” 것을 λ§ν•œλ‹€.

join
join

 

μžμ—° 쑰인

  • 동등 쑰인의 κ²°κ³Ό λ¦΄λ ˆμ΄μ…˜μ—μ„œ 쑰인 μ• νŠΈλ¦¬λ·°νŠΈλ₯Ό μ œμ™Έν•œ 쑰인 (쀑볡 ν•„λ“œ 제거)

join

 

μ™ΈλΆ€ 쑰인

  • 널값이 λ“€μ–΄ μžˆλŠ” νˆ¬ν”Œλ“€μ„ 닀루기 μœ„ν•΄μ„œ 쑰인 연산을 ν™•μž₯ν•œ 쑰인
  • 일반적인 쑰인은 두 λ¦΄λ ˆμ΄μ…˜μ—μ„œ λŒ€μ‘λ˜λŠ” νŠœν”Œμ΄ 없을 경우, κ·Έ νŠœν”Œμ„ 결과에 ν¬ν•¨μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ μ™ΈλΆ€ 쑰인은 λŒ€μ‘λ˜λŠ” νŠœν”Œμ΄ 없어도 결과에 ν¬ν•¨μ‹œν‚€κ³ , μƒλŒ€ λ¦΄λ ˆμ΄μ…˜μ˜ μ• νŠΈλ¦¬λ·°νŠΈ 값은 null둜 μ±„μš΄λ‹€.
  • μ™ΈλΆ€ μ‘°μΈμ—λŠ” μ–΄λŠ λ¦΄λ ˆμ΄μ…˜μ„ κΈ°μ€€μœΌλ‘œ null둜 μ±„μš°λŠ”μ§€μ— 따라 3κ°€μ§€λ‘œ λ‚˜λ‰œλ‹€.
    • μ™Όμͺ½ μ™ΈλΆ€ 쑰인(left outer join)
    • 였λ₯Έμͺ½ μ™ΈλΆ€ 쑰인(right outer join)
    • μ™„μ „ μ™ΈλΆ€ 쑰인(full outer join)

left outer join
left outer join
right outer join
right outer join
full outer join
full outer join


집단 ν•¨μˆ˜

  • ν•œ λ¦΄λ ˆμ΄μ…˜μ—μ„œ νŠΉμ • μ†μ„±λ“€μ˜ 값듀에 λŒ€ν•΄ 총합, 평균, μ΅œλŒ€, μ΅œμ†Œ, 개수 λ“±μ˜ 연산을 μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜
  • 관계 λŒ€μˆ˜μ˜ ν‘œν˜„λ ₯을 높이기 μœ„ν•΄ μƒˆλ‘œ μΆ”κ°€λœ μ—°μ‚°μž
  • 집단 ν•¨μˆ˜λŠ” 각 그룹에 λŒ€ν•΄ λ…λ¦½μ μœΌλ‘œ 적용되며, κ·Έλ£Ήν™” μ—°μ‚°μžμ™€ ν•¨κ»˜ μ‚¬μš© λœλ‹€.
  • AVG, SUM, MIN, MAX, COUNT

집단 ν•¨μˆ˜


κ·Έλ£Ήν™”

  • ν•œ λ¦΄λ ˆμ΄μ…˜μ—μ„œ νŠΉμ • μ†μ„±λ“€μ˜ 값에 따라 νŠœν”Œλ“€μ„ μ—¬λŸ¬ 그룹으둜 λΆ„λ₯˜ν•˜κ³ , 각 그룹에 λŒ€ν•΄ 집단 ν•¨μˆ˜λ₯Ό μ μš©ν•˜λŠ” μ—°μ‚°μž
  • κ·Έλ£Ήν™” μ—°μ‚°μžλŠ” G둜 ν‘œκΈ°λ¨

κ·Έλ£Ήν™”


관계 λŒ€μˆ˜μ™€ SQL

관계 λŒ€μˆ˜λŠ” 관계 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ¦΄λ ˆμ΄μ…˜μ„ μ‘°μž‘ν•˜κΈ° μœ„ν•œ 절차적 언어이닀. 즉, μ›ν•˜λŠ” 데이터λ₯Ό μ–»κΈ° μœ„ν•΄ μ–΄λ–€ 연산을 μ–΄λ–€ μˆœμ„œλ‘œ μˆ˜ν–‰ν•  것인지λ₯Ό μˆ˜ν•™ 곡식 처럼 λͺ…μ‹œν•¨μœΌλ‘œμ¨ λ¦΄λ ˆμ΄μ…˜μ„ λ„μΆœ ν•  수 μžˆλ‹€. 관계 λŒ€μˆ˜μ—λŠ” 일반 집합 μ—°μ‚°μžμ™€ 순수 관계 μ—°μ‚°μžκ°€ 있으며, 이듀은 λͺ¨λ‘ λ¦΄λ ˆμ΄μ…˜μ„ μž…λ ₯으둜 λ°›μ•„ λ¦΄λ ˆμ΄μ…˜μ„ 좜λ ₯ν•œλ‹€.
SQL은 관계 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό μ •μ˜ν•˜κ³  μ‘°μž‘ν•˜κΈ° μœ„ν•œ 선언적 언어이닀. 즉, μ›ν•˜λŠ” 데이터가 λ¬΄μ—‡μΈμ§€λ§Œ μ„ μ–Έν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ΄ μ•Œμ•„μ„œ 졜적의 λ°©λ²•μœΌλ‘œ 질의λ₯Ό μˆ˜ν–‰ν•œλ‹€. SQLμ—λŠ” DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language) λ“±μ˜ ꡬ성 μš”μ†Œκ°€ 있으며, 이듀은 λͺ¨λ‘ λ¦΄λ ˆμ΄μ…˜μ— λŒ€ν•œ 연산을 ν‘œν˜„μ΄λ‹€.

SQL


관계 λŒ€μˆ˜μ™€ SQL은 μ„œλ‘œ λ°€μ ‘ν•œ 관계에 μžˆλ‹€κ³  λ³Ό 수 μžˆλ‹€. μ• μ΄ˆμ— 관계 λŒ€μˆ˜μ˜ μ—…κ·Έλ ˆμ΄λ“œ 버전이 SQL 이기 λ•Œλ¬Έμ΄λ‹€. SQL은 관계 λŒ€μˆ˜μ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³ , 관계 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ‹€μ–‘ν•œ 데이터λ₯Ό 쉽고 κ°•λ ₯ν•˜κ²Œ μ‘°μž‘ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€. μ•„μ£Ό μ‰½κ²Œ λΉ„μœ ν•˜μžλ©΄, μˆ˜ν•™ 곡식과 같은 관계 λŒ€μˆ˜μ‹μ„ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ²˜λŸΌ κ΅¬μ„±ν•œκ²Œ SQL이라고 보면 λœλ‹€.

예λ₯Ό λ“€μ–΄, 관계 λŒ€μˆ˜μ˜ μ…€λ ‰νŠΈ μ—°μ‚°μžλŠ” SQL의 WHERE 절과 λŒ€μ‘λ˜κ³ , ν”„λ‘œμ νŠΈ μ—°μ‚°μžλŠ” SQL의 SELECT 절과 λŒ€μ‘λœλ‹€. λ˜ν•œ, 관계 λŒ€μˆ˜μ˜ 쑰인 μ—°μ‚°μžλŠ” SQL의 JOIN 절과 λŒ€μ‘λ˜λ©°, 집단 ν•¨μˆ˜μ™€ κ·Έλ£Ήν™” μ—°μ‚°μžλŠ” SQL의 집합 ν•¨μˆ˜μ™€ GROUP BY 절과 λŒ€μ‘λœλ‹€.

-- μ…€λ ‰νŠΈ μ—°μ‚°μž: σ<salary > 3000000> (EMP)
SELECT * FROM EMP WHERE salary > 3000000;

-- ν”„λ‘œμ νŠΈ μ—°μ‚°μž: Π<name, dept> (EMP)
SELECT name, dept FROM EMP;
  
-- 합집합 μ—°μ‚°μž: EMP ∪ MANAGER
SELECT * FROM EMP UNION SELECT * FROM MANAGER;
  
-- ꡐ집합 μ—°μ‚°μž: EMP ∩ MANAGER
SELECT * FROM EMP INTERSECT SELECT * FROM MANAGER;
  
-- 차집합 μ—°μ‚°μž: EMP - MANAGER
SELECT * FROM EMP EXCEPT SELECT * FROM MANAGER;
  
-- μΉ΄ν‹°μ…˜ κ³± μ—°μ‚°μž: EMP × DEPT
SELECT * FROM EMP CROSS JOIN DEPT;
  
-- 쑰인 μ—°μ‚°μž: EMP β‹ˆ<EMP.dept = DEPT.dno> DEPT
SELECT * FROM EMP JOIN DEPT ON EMP.dept = DEPT.dno;
  
-- λ””λΉ„μ „ μ—°μ‚°μž: WORKS ÷ PROJECT
SELECT empno FROM WORKS GROUP BY empno HAVING COUNT(*) = (SELECT COUNT(*) FROM PROJECT);
  
-- 집단 ν•¨μˆ˜μ™€ κ·Έλ£Ήν™” μ—°μ‚°μž: DNO G AVG_SALARY (EMP)
SELECT DNO, AVG(SALARY) AS AVG_SALARY FROM EMP GROUP BY DNO;

λ”°λΌμ„œ, SQL μ–Έμ–΄λ₯Ό ν•™μŠ΅ν•˜κΈ° μ•žμ„œ λ¨Όμ € 관계 λŒ€μˆ˜λ₯Ό μ΄ν•΄ν•˜λ©΄ λ¦΄λ ˆμ΄μ…˜ λ„μΆœ μ›λ¦¬λŠ” 거의 κ°™μœΌλ‹ˆ λ‹¨μˆœνžˆ SQL λ¬Έλ²•λ§Œ μΆ”κ°€λ‘œ 배우면 이미 λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ„ λ‹€λ£¨λŠ”λ° λ¬Έμ œκ°€ μ—†λ‹€. λ¬Όλ‘  μ²˜μŒλΆ€ν„° SQL을 톡해 관계 λŒ€μˆ˜μ˜ κ°œλ…κ³Ό 원리λ₯Ό ν•™μŠ΅ν•  μˆ˜λ„ μžˆλ‹€. 


관계 해석 (Relation Calculus)

μš°λ¦¬κ°€ μ§€κΈˆκΉŒμ§€ 배운 관계 λŒ€μˆ˜λŠ” μ „μš© μ—°μ‚°μžλ₯Ό 톡해 μ›ν•˜λŠ” λͺ©ν‘œ 데이터λ₯Ό μ–»κΈ° μœ„ν•˜μ—¬ μ–΄λ–»κ²Œ 데이터λ₯Ό 검색할 것인지 절차λ₯Ό μˆ˜ν•™ μ‹μœΌλ‘œ 순차적으둜 λͺ…μ„Έν•΄ λ¦΄λ ˆμ΄μ…˜μ„ λ„μΆœν•΄μ™”λ‹€.

반면, 관계 해석은 μ›ν•˜λŠ” 데이터가 λ¬΄μ—‡μΈμ§€λ§Œ μ„ μ–Έν•˜λŠ” 이λ₯Έλ°” λΉ„μ ˆμ°¨μ  언어이닀. 즉, μ›ν•˜λŠ” λ°μ΄ν„°λ§Œ λͺ…μ‹œν•˜κ³  "μ–΄λ–»κ²Œ 질의λ₯Ό ν•΄μ„ν•˜λŠ”κ°€"에 λŒ€ν•΄ 언급이 μ—†λŠ” μ„ μ–Έλ§Œ ν•˜λŠ” 언어인 것이닀.

관계 해석은 νŠœν”Œ 관계 해석 (Tuple Relational Calculus), λ„메인 관계 해석 (Domain Relational Calculus) μ’…λ₯˜κ°€ 있으며, μˆ˜ν•™ 식 ν˜•νƒœλ‘œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

-- EMPLOYEE λ¦΄λ ˆμ΄μ…˜μ—μ„œ κΈ‰μ—¬κ°€ 3000 이상인 μ‚¬μ›λ“€μ˜ 이름과 κΈ‰μ—¬λ₯Ό μ°ΎλŠ” 관계 해석 식
{<t.Ename, t.Salary> | t ∈ EMPLOYEE ∧ t.Salary ≥ 3000}

-- μœ„μ˜ 관계 해석식과 λ§€μΉ­λ˜λŠ” SQL μ½”λ“œ
SELECT Ename, Salary
FROM EMPLOYEE
WHERE Salary >= 3000;
ꡬ뢄 κ΅¬μ„±μš”μ†Œ 기호 μ„€λͺ…
μ—°μ‚°μž OR μ—°μ‚° V μ›μžμ‹ κ°„ “λ˜λŠ””μ΄λΌλŠ” κ΄€κ³„λ‘œ μ—°κ²°
AND μ—°μ‚° μ›μžμ‹ κ°„ “그리고”λΌλŠ” κ΄€κ³„λ‘œ μ—°κ²°
NOT μ—°μ‚° γ„± μ›μžμ‹μ— λŒ€ν•΄ λΆ€μ •
μ •λŸ‰μž μ „μΉ­ μ •λŸ‰μž
(Universal Quantifier
λͺ¨λ“  κ°€λŠ₯ν•œ νŠœν”Œ “For All”
# All의 ‘A’λ₯Ό 뒀집은 ν˜•
쑴재 μ •λŸ‰μž
(Existential Quantifier)
μ–΄λ–€ νŠœν”Œ ν•˜λ‚˜λΌλ„ 쑴재 “There Exists”
# Exists의 ‘E’λ₯Ό 뒀집은 ν˜•

Relation Calculus
관계 λŒ€μˆ˜μ‹κ³Ό μ™„μ „νžˆ λ‹€λ₯Έ 관계 해석식을 λ³΄λ‹ˆ 머리만 μ•„ν”„λ‹€


관계 λŒ€μˆ˜ vs 관계 해석

κ΄€κ³„λŒ€μˆ˜λŠ” μ–΄λ–»κ²Œ 데이터λ₯Ό μ²˜λ¦¬ν• μ§€λ₯Ό 효율적으둜 μ •ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, 관계해석은 μ–΄λ–€ 데이터가 ν•„μš”ν•œμ§€λ₯Ό λ”μš± κ°„λ‹¨ν•˜κ²Œ μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λœλ‹€κ³  보면 λœλ‹€.

κ΄€κ³„λŒ€μˆ˜ 관계해석
절차적 μ–Έμ–΄(μˆœμ„œ λͺ…μ‹œ) λΉ„μ ˆμ°¨μ  μ–Έμ–΄(계산 μˆ˜μ‹μ˜ μœ μ—°μ  μ‚¬μš©),
ν”„λ ˆλ””ν‚· 해석(Predicate Calculus) 기반
μ›ν•˜λŠ” 정보λ₯Ό μ–»κΈ° μœ„ν•΄ μ–΄λ–»κ²Œ (how) 질의λ₯Ό ν•΄μ„ν•˜λŠ”μ§€λ₯Ό 기술 μ›ν•˜λŠ” 정보가 무엇 (what) μΈμ§€λ§Œ λͺ…μ‹œν•˜κ³  μ–΄λ–»κ²Œ 질의λ₯Ό ν•΄μ„ν•˜λŠ”μ§€μ— λŒ€ν•΄ μ–ΈκΈ‰ν•˜μ§€ μ•ŠλŠ” μ„ μ–Έ
μ—°μ‚°μžμ™€ ν”Όμ—°μ‚°μžλ‘œ κ΅¬μ„±λ˜λ©°, μ—°μ‚°μžλŠ” λ¦΄λ ˆμ΄μ…˜μ— μ μš©λ˜μ–΄ μƒˆλ‘œμš΄ λ¦΄λ ˆμ΄μ…˜μ„ μƒμ„± λͺ…μ œμ™€ λ³€μˆ˜λ‘œ κ΅¬μ„±λ˜λ©°, λͺ…μ œλŠ” μ°Έ λ˜λŠ” κ±°μ§“μ˜ 값을 가지고, λ³€μˆ˜λŠ” λ¦΄λ ˆμ΄μ…˜μ˜ νŠœν”Œμ΄λ‚˜ μ• νŠΈλ¦¬λ·°νŠΈ 값을 λ‚˜νƒ€λƒ„
μ—°μ‚°μžμ˜ μ’…λ₯˜μ— 따라 λ‹€μ–‘ν•œ 데이터 μ‘°μž‘μ„ ν•  수 있음  μ—°κ²°μžμ™€ ν•œμ •μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³΅μž‘ν•œ 쑰건식을 λ§Œλ“€ 수 있음
μ’…λ₯˜λ‘œλŠ” μˆœμˆ˜κ΄€κ³„ μ—°μ‚°μž, μΌλ°˜μ§‘ν•© μ—°μ‚°μžκ°€ μžˆλ‹€ μ’…λ₯˜λ‘œλŠ” νŠœν”Œ 관계 해석, 도메인 관계 해석이 μžˆλ‹€
 

관계 해석을 λ°˜λ“œμ‹œ 곡뢀해야 λ˜λŠ”κ°€ πŸ€”

보톡 λŒ€ν•™ κ°•μ˜λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€ ꡐ제λ₯Ό 보면, 관계 λŒ€μˆ˜μ— λŒ€ν•΄ μžμ„Ένžˆ 닀루고 λ°”λ‘œ SQL둜 λ„˜μ–΄κ°€μ§€, 관계 해석을 μ€‘μ μ μœΌλ‘œ λ‹€λ£¨μ§€λŠ” μ•ŠλŠ”λ‹€. 관계 λŒ€μˆ˜λ‘œ λ¦΄λ ˆμ΄μ…˜ 쑰합법 및 λ„μΆœ 원리λ₯Ό 배우고 λ°”λ‘œ SQL둜 μ‹€μ „ λ°μ΄ν„°λ² μ΄μŠ€ 질의λ₯Ό μŠ΅λ“ν•˜λŠ” 것 λ§ŒμœΌλ‘œλ„ 싀무λ₯Ό ν•˜λŠ”λ° μΆ©λΆ„ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μ• μ΄ˆμ— 관계 해석은 λΉ„μ ˆμ°¨μ μΈ 언어이기 λ•Œλ¬Έμ—, 컴퓨터가 직접 μ‹€ν–‰ν•  수 μžˆλŠ” ν˜•νƒœκ°€ μ•„λ‹ˆλ‹€. κ·Έλž˜μ„œ 관계 ν•΄μ„μœΌλ‘œ ν‘œν˜„λœ 질의λ₯Ό 관계 λŒ€μˆ˜λ‘œ λ³€ν™˜ν•˜κ±°λ‚˜ SQL둜 λ²ˆμ—­ν•΄μ•Ό ν•˜λŠ” μΆ”κ°€ μž‘μ—…μ΄ λ“ λ‹€. λ”°λΌμ„œ λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ ¨ μ„œμ μ—μ„œλŠ” 관계 λŒ€μˆ˜μ— λŒ€ν•΄ μžμ„Ένžˆ 닀루고 관계 해석은 κ°„λ‹¨ν•˜κ²Œ λ‹€λ£¨λŠ” κ²½μš°κ°€ λ§Žλ‹€. ν•˜μ§€λ§Œ 이것은 관계 해석이 μ€‘μš”ν•˜μ§€ μ•Šλ‹€λŠ” μ˜λ―Έκ°€ μ•„λ‹ˆλΌ, 관계 λŒ€μˆ˜κ°€ μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ 더 많이 μ‚¬μš©λ˜κ³  κ΅¬ν˜„ν•˜κΈ° 쉽기 λ•Œλ¬Έμ΄λ‹€.

관계 해석을 κ³΅λΆ€ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 이둠적인 λ°°κ²½κ³Ό 논리적인 ꡬ쑰λ₯Ό 이해할 수 있고, SQL을 보닀 효과적으둜 μž‘μ„±ν•˜κ³  뢄석할 수 μžˆλ‹€. λ˜ν•œ 관계 해석은 λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ˜λ―Έμ™€ μ œμ•½ 쑰건을 λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλŠ” λ°©λ²•μ΄λ―€λ‘œ, λ°μ΄ν„°λ² μ΄μŠ€ 섀계와 λͺ¨λΈλ§μ—λ„ 도움이 λœλ‹€. μ‹€μ œλ‘œ 관계 해석은 관계 λŒ€μˆ˜μ™€ λ™λ“±ν•œ ν‘œν˜„λ ₯을 가지고 있으며, 논리적인 μΆ”λ‘ κ³Ό μˆ˜ν•™μ μΈ ν‘œν˜„μ„ μ‚¬μš©ν•˜μ—¬ 질의λ₯Ό μ •μ˜ν•  수 μžˆλ‹€. λ”°λΌμ„œ 관계 해석은 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ κΉŠμ€ 지식과 μ‹€λ ₯을 ν–₯μƒμ‹œν‚€λŠ” 데 μœ μš©ν•˜λ‹€. 

κ·ΈλŸ¬λ‚˜ μ•„λ¬΄λž˜λ„ 관계 λŒ€μˆ˜, 관계 해석을 λͺ¨λ‘ κ³΅λΆ€ν•˜κΈ°μ—λŠ” μ‹œκ°„μ μΈ μ—¬μœ  λ•Œλ¬Έμ— ν˜„μ‹€μ μœΌλ‘œλŠ” νž˜λ“ κ²ƒμ€ 사싀이닀. κ·Έλž˜μ„œ 관계 λŒ€μˆ˜λ₯Ό μš°μ„ μ μœΌλ‘œ κ³΅λΆ€ν•˜κ³ , 관계 해석은 ν•„μš”ν•œ λΆ€λΆ„λ§Œ κ³΅λΆ€ν•˜λŠ” 것도 λ‚˜μ˜μ§€ μ•Šλ‹€. μ€‘μš”ν•œ 것은 λ°μ΄ν„°λ² μ΄μŠ€μ˜ 이둠과 SQL을 톡해 λ°μ΄ν„°λ² μ΄μŠ€ μ‹€μŠ΅μ„ λ³‘ν–‰ν•˜λ©΄μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ κΉŠμ€ 지식과 μ‹€λ ₯을 ν–₯μƒμ‹œν‚€λŠ” 것이닀.


# 참고자료

https://slidesplayer.org/slide/17323973/

https://velog.io/@ieed0205/%EA%B4%80%EA%B3%84%EB%8C%80%EC%88%98-SQL-LEEToday

https://wook-2124.tistory.com/333