κ΄κ³ λμ(Relational Algebra)
κ΄κ³ λμ(Relational Algebra)¶
μ΄μ : κ΄κ³ λͺ¨λΈ | λ€μ: ER λͺ¨λΈλ§
κ΄κ³ λμλ κ΄κ³ λͺ¨λΈμ νμμ μ§μ μΈμ΄μ λλ€. νλ λλ λ κ°μ κ΄κ³λ₯Ό μ λ ₯μΌλ‘ λ°μ μλ‘μ΄ κ΄κ³λ₯Ό μΆλ ₯μΌλ‘ μμ±νλ μ°μ°μμ μ§ν©μ μ 곡ν©λλ€. κ΄κ³ λμλ₯Ό μ΄ν΄νλ κ²μ SQL 쿼리 μ²λ¦¬μ κΈ°λ°μ΄ λκΈ° λλ¬Έμ νμμ μ λλ€. λͺ¨λ SQL 쿼리λ λ΄λΆμ μΌλ‘ κ΄κ³ λμ ννμμΌλ‘ λ³νλλ©°, 쿼리 μ΅μ νκΈ°λ μ΄λ₯Ό λ³ννκ³ κ°μ ν μ μμ΅λλ€.
λͺ©μ°¨¶
- κ΄κ³ λμ κ°μ
- λ¨ν μ°μ°
- μ§ν© μ°μ°
- μ΄ν μ°μ°: μΉ΄ν°μ κ³±κ³Ό μ‘°μΈ
- λλμ
- μΆκ° μ°μ°
- 쿼리 νΈλ¦¬μ λμμ μ΅μ ν
- κ΄κ³ ν΄μ (κ°λ¨ν μκ°)
- SQLκ³Όμ λμΉμ±
- μμ ν μμ μμ
- μ°μ΅ λ¬Έμ
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 λͺ¨λΈλ§