๊ด๊ณ ๋์
์ง์์ด(Query language)
- ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์ญ์ , ์์ ํ๊ณ ๊ฒ์ํ๋ ๋ฑ ๋ฐ์ดํฐ ์กฐ์์ ์ํ ์ฐ์ฐ๋ค์ ํํํ๊ธฐ ์ํ ์ธ์ด
โ ์ ์ฐจ์ ์ธ์ด(procedural language)
- ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์ํ๋์ด์ผ ํ ์ผ๋ จ์ ์ ์ฐจ๋ฅผ ๋ช ์ํด์ผํ๋ ์ธ์ด
- C, Java์ ๊ฐ์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ ์ฌ
โ ๋น์ ์ฐจ์ ์ธ์ด(non-procedural/declarative language)
- ์ํ ์ ์ฐจ๋ ๊ธฐ์ ํ์ง ์๊ณ ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ง์ ํ์์ , ์ ์ธ์ ์ผ๋ก ๋ช ์ํ๋ ์ธ์ด
- ์ค์ ์ํ์ ์ฐจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ๋ด๋ถ์ ์ผ๋ก ๊ฒฐ์ ํจ
โ
๊ด๊ณ ๋์์ ์ฐ์ฐ ์ข ๋ฅ
โ
์ ํ(selection)
- ํ๋์ ํ ์ด๋ธ์์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๋ค์ ๊ฒ์ํ๋ ๊ธฐ๋ฅ
σ <์กฐ๊ฑด์>(<ํ ์ด๋ธ ์ด๋ฆ>)
โ
<ํ ์ด๋ธ ์ด๋ฆ>์ ์ฐ์ฐ์ ๋์์ด ๋๋ ํ ์ด๋ธ์ ์ด๋ฆ
<์กฐ๊ฑด์> : ๋น๊ต์ฐ์ฐ์(<, >, <=, >=, <>, ≠)์ Bool ์ฐ์ฐ์(AND(∧), OR(∨), NOT(๏ฟข))์ ์กฐํฉ
โ
์) student ํ ์ด๋ธ์์ address๊ฐ '์์ธ'์ธ ๋ ์ฝ๋๋ฅผ ๊ฒ์
σ address = '์์ธ'(student)
stu_id |
resident_id |
name |
year |
address |
dept_id |
1292001 |
900424-1825409 |
๊น๊ด์ |
2 |
์์ธ |
920 |
1292002 |
900305-1730021 |
๊น์ ํ |
2 |
์์ธ |
920 |
1292003 |
891021-2308302 |
๊นํ์ |
2 |
๋์ |
920 |
1292301 |
890902-2704012 |
๊นํ์ |
2 |
๋๊ตฌ |
923 |
โฌ๏ธ ์ฐ์ฐ ๊ฒฐ๊ณผ
stu_id |
resident_id |
name |
year |
address |
dept_id |
1292001 |
900424-1825409 |
๊น๊ด์ |
3 |
์์ธ |
920 |
1292002 |
900305-1730021 |
๊น์ ํ |
3 |
์์ธ |
920 |
์ถ์ถ(project)
- ํ ์ด๋ธ์์ ์ฌ์ฉ์๊ฐ ์ํ๋ ํ๋๋ง์ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ๋ ์ฐ์ฐ
π<ํ๋๋ฆฌ์คํธ>(<ํ ์ด๋ธ ์ด๋ฆ>)
โ
<ํ ์ด๋ธ ์ด๋ฆ>์ ์ฐ์ฐ์ ๋์์ด ๋๋ ํ ์ด๋ธ์ ์ด๋ฆ
<ํ๋๋ฆฌ์คํธ> : ํ ์ด๋ธ์์ ์ถ์ถํ๊ณ ์ ํ๋ ํ๋๋ค์ ๋ฆฌ์คํธ
โ
์) student ํ ์ด๋ธ์์ stu_id์ name ํ๋๋ง์ ์ถ์ถ
π stu_id, name (student)
stu_id |
resident_id |
name |
year |
address |
dept_id |
1292001 |
900424-1825409 |
๊น๊ด์ |
2 |
์์ธ |
920 |
1292002 |
900305-1730021 |
๊น์ ํ |
2 |
์์ธ |
920 |
1292003 |
891021-2308302 |
๊นํ์ |
2 |
๋์ |
920 |
1292301 |
890902-2704012 |
๊นํ์ |
2 |
๋๊ตฌ |
923 |
โฌ๏ธ ์ฐ์ฐ ๊ฒฐ๊ณผ
stu_id |
resident_id |
1292001 |
900424-1825409 |
1292002 |
900305-1730021 |
1292003 |
891021-2308302 |
1292301 |
890902-2704012 |
์ฌ๋ช ๋ช ์ฐ์ฐ
- ํ ์ด๋ธ์ ์ด๋ฆ์ ๋ถ์ฌํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ์ฐ์ฐ
ρ <ํ ์ด๋ธ๋ช 1>(<ํ ์ด๋ธ๋ช 2>)
⇒ <ํ ์ด๋ธ๋ช 2>์ ์ด๋ฆ์ <ํ ์ด๋ธ๋ช 1>๋ก ๋ณ๊ฒฝํ๋ผ๋ ์๋ฏธ
ρ <ํ ์ด๋ธ๋ช 1>(<ํ๋๋ฆฌ์คํธ>)(<ํ ์ด๋ธ๋ช 2>)
⇒ <ํ ์ด๋ธ๋ช 2>์ ์ด๋ฆ์ <ํ ์ด๋ธ๋ช 1>๋ก ๋ณ๊ฒฝํ๋ ๋์์ <ํ ์ด๋ธ๋ช 2>์ ์ ์๋ ํ๋๋ช ๋ค์ ๋ชจ๋ <ํ๋๋ฆฌ์คํธ>์ ํ๋๋ช ๋ค๋ก ๊ฐ๊ฐ ๋ณ๊ฒฝ
โ
์งํฉ ์ฐ์ฐ
- ์ํ์ ์งํฉ ์ด๋ก ์์ ์ ์๋ ์ฐ์ฐ
- ํฉ์งํฉ(union)
- ์ฐจ์งํฉ(minus/difference)
- ๊ต์งํฉ(intersection) - ์ฐจ์งํฉ์ผ๋ก ์ ์ํ ์ ์์
- ์นดํฐ์ ํ๋ก๋ํธ(Cartesian product)
โ
์ดํญ ์ฐ์ฐ
- ํผ์ฐ์ฐ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ ํ ์ด๋ธ(๋ ์ฝ๋ ์งํฉ)์
โ ๋ ํผ์ฐ์ฐ์๋ ์๋ก ํธํ ๊ฐ๋ฅํ ํ ์ด๋ธ์ด์ฌ์ผํจ
โ
โํฉ์งํฉ, ์ฐจ์งํฉ, ๊ต์งํฉ ์ฐ์ฐ์์ ๋ ํผ์ฐ์ฐ์(ํ ์ด๋ธ)์ ์ฐจ์(ํ๋์ ์)์ ํ๋ ์ด๋ฆ๋ค์ด ๋์ผํด์ผํจ
โ๊ฐ์ ์ด๋ฆ์ ํ๋๋ค์ ๋๋ฉ์ธ๋ ์ผ์นํด์ผํจ
โ
์นดํฐ์ ํ๋ก๋ํธ(Cartesian product)
- ๋ ๊ฐ์ ํ ์ด๋ธ์์ ๊ฐ๊ฐ์ ๋ ์ฝ๋๋ค์ ์๋ก ๊ฒฐํฉํ์ฌ ํ๋์ ๋ ์ฝ๋๋ก ๊ตฌ์ฑํ๋ฉด์ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ๋ ์ฝ๋๋ค์ ์์ฑ
<ํ ์ด๋ธ๋ช 1> × <ํ ์ด๋ธ๋ช 2>
๋ ํ ์ด๋ธ์ ๋ ์ฝ๋ ์๊ฐ ๊ฐ๊ฐ n1, n2 ์ด๊ณ ํ๋์ ์๊ฐ ๊ฐ๊ฐ a1, a2๋ผ ํ ๋ ์นดํฐ์ ํ๋ก๋ํธ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ก ๋์ถ๋๋ ํ ์ด๋ธ์ ๋ ์ฝ๋ ์๋ n1× n2 ์ด๋ฉฐ ํ๋์ ์๋ a1+ a2
โ ๊ตํ๋ฒ์น๊ณผ ๊ฒฐํฉ๋ฒ์น์ด ์ฑ๋ฆฝํจ
์ธํ ์กฐ์ธ
<ํ ์ด๋ธ ์ด๋ฆ1> โทโ <์กฐ๊ฑด์><ํ ์ด๋ธ ์ด๋ฆ2>
- ๋ ํ ์ด๋ธ๋ก๋ถํฐ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๋ค์ ํ๋์ ๋ ์ฝ๋๋ก ๊ฒฐํฉํ๋ ์ฐ์ฐ
โ ์นดํฐ์ ํ๋ก๋ํธ๋ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ์ํด ๋ ์ฝ๋๋ค์ ์์ฑํ์ง๋ง ์กฐ์ธ์ ํน์ ์กฐ๊ฑด (<์กฐ๊ฑด์>)์ ๋ง์กฑํ๋
๋ ์ฝ๋ ์๋ค๋ง์ ์ ํํจ
- <์กฐ๊ฑด์>์ ์กฐ์ธ ์กฐ๊ฑด์ด๋ผ ๋ถ๋ฆ
- ์กฐ์ธ ์กฐ๊ฑด์ ํ๋ ๊ฐ์ ๋๋ฑ๋น๊ต(=)๊ฐ ๋๋ถ๋ถ์ด๋ฉฐ ์ด๋ฅผ ๋๋ฑ์กฐ์ธ์ด๋ผ ํจ
- ์กฐ์ธ ์ฐ์ฐ์ ์นดํฐ์ ํ๋ก๋ํธ ๋ฐ ์ ํ ์ฐ์ฐ์ผ๋ก ํํ ๊ฐ๋ฅ
<ํ ์ด๋ธ ์ด๋ฆ1> โทโ <์กฐ๊ฑด์><ํ ์ด๋ธ ์ด๋ฆ2> ≡ σ <์กฐ๊ฑด์>(<ํ ์ด๋ธ ์ด๋ฆ1> × <ํ ์ด๋ธ ์ด๋ฆ2>)
โ
์) ๊ต์๋ค์ ์ด๋ฆ๊ณผ ์์๋ ํ๊ณผ ์ด๋ฆ์ ๊ฒ์
πprofessor.name, department.dept_name ((σ professor.dept_id = department.dept_id)(professor × department))
โฌโฌโฌโฌ
πprofessor.name, department.dept_name (professor โทโ professor.dept_id = department.dept_id department)
โ
์์ฐ ์กฐ์ธ
- ๋ ํ ์ด๋ธ์์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ๋ ํ๋๋ค์ ๋ํ ๋๋ฑ ์กฐ์ธ, ์กฐ์ธ ๊ฒฐ๊ณผ์์ ์ค๋ณต๋๋ ํ๋ ์ค ํ๋๋ฅผ ์ ๊ฑฐํ๋ ์ฐ์ฐ
<ํ ์ด๋ธ ์ด๋ฆ1> โทโ <ํ ์ด๋ธ ์ด๋ฆ2>
์) '๋ฐ์ดํฐ๋ฒ ์ด์ค' ๊ณผ๋ชฉ์ด ๊ฐ์ค๋ ์ฐ๋, ํ๊ธฐ, ๋ถ๋ฐ ์ ๋ณด๋ฅผ ๊ฒ์
πyear, semester, division (σ title = '๋ฐ์ดํฐ๋ฒ ์ด์ค' (course โทโ class))
โฌโฌโฌโฌ
πyear, semester, division (σ course.course_id = class.course_id ∧ title = '๋ฐ์ดํฐ๋ฒ ์ด์ค' (course × class))
โ
์ธ๋ถ ์กฐ์ธ
- ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๋ ์ฝ๋๊น์ง ๊ฒ์ ๊ฒฐ๊ณผ์ ํฌํจ์ํค๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ๋งค์น๋์ง ์๋ ๋ ์ฝ๋์ ํ๋๋ค์ ๋ํด์๋ NULL ๊ฐ์ ์ ๋ ฅ
โฝ ์ผ์ชฝ ์ธ๋ถ์กฐ์ธ(left outer join) +โทโ
โฝ ์ค๋ฅธ์ชฝ ์ธ๋ถ์กฐ์ธ(right outer join) โทโ+
โฝ ์์ ์ธ๋ถ์กฐ์ธ(full outer join) +โทโ+
โ
์) freshmen +โทโ member
name |
address |
dept_name |
๊น๊ด์ |
์์ธ |
์ปดํจํฐ๊ณตํ๊ณผ |
๊นํ์ |
๋์ |
์ฐ์ ๊ณตํ๊ณผ |
์กฐ์์ |
๋์ |
NULL |
์) freshmen โทโ+ member
name |
address |
dept_name |
๊น๊ด์ |
์์ธ |
์ปดํจํฐ๊ณตํ๊ณผ |
๊นํ์ |
๋์ |
์ฐ์ ๊ณตํ๊ณผ |
์ด์ง์ |
NULL |
์ ์๊ณตํ๊ณผ |
์) freshmen +โทโ+ member
์ง์ ์ฐ์ฐ
- ๋ณต์กํ ์ง์๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์ง์๋ก ๋ถ๋ฆฌํ์ฌ ๋ํ๋ด๊ณ ์ค๊ฐ ๊ฒฐ๊ณผ์ ์ด๋ฆ์ ๋ถ์ฌํ๊ธฐ ์ํ ์ฐ์ฐ
- ์ฐ์ฐ ๊ธฐํธ: ← ์ฌ์ฉ
์) student ํ ์ด๋ธ์์ 3ํ๋ ์ธ ํ์์ ์ ํํด์ ๊ทธ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ junior๋ผ๋ ์ด๋ฆ์ผ๋ก ์ง์
junior ← σ year = 3 (student)