2020년 7월 1일 수요일

Relational Query Language

SQL Language 는 declarative 한 언어이다. 다시말해서 컴퓨터의 기본적 성격인 절차적인 성격을 몇단계 추상화시킨 언어라는 것이다. 이러한 SQL로 짜인 코드를 컴파일하기 위해선 Relational Query Language 로 변환하는 과정이 필요하다. 이 언어는 procedural 하다는 점 외에는 SQL Language와 크게 다르지 않은데, 이렇게 번역하는 큰 이유가 컴퓨터가 절차적인 기계임을 잘 드러낸다. Relational Query Language 는 보통 multiset 보단 set 으로 설명을 한다.

SQL

- RA(Relational Algebra)

- RC(Releational Calculus) - Tuple Relational Calculus, Domain Relational Calculus

RA

6개의 basic 기호, 6개의 additional 기호, 2개의 extended 기호로 이루어져 있다.

Basic Calculus

아래 6가지의 연산을 정의. RA Sentence 의 정의는 당연히 아래 6가지의 연산의 재귀적 정의.

1. Select

$\sigma _P\left(r\right)$σP(r)

select * from r where p;

2. Project

$\Pi _{A1,\ A2,\ A3\ ...}\left(r\right)$ΠA1, A2, A3 ...(r)

select A1, A2, Ac ... from r;

3. Rename

$\Rho _{x\left(A1,\ A2,\ A3...\right)}\left(r\right)$Ρx(A1, A2, A3...)(r)

select --as A1, -- as A2, -- as A3 from r as x;

4. Cartes Mul

$r\times s$r×s

select * from r, s;

5. Union

$r\cup s$rs

r union s;

6. Except

$r\ -s$r s

r except s;

Additional Calculus

1. intersec

$r\cap s\ =\ r\ -\ \left(r\ -\ s\right)$rs = r  (r  s)

단순히 교집합이다.

2. (Inner)Join

$R\ =\ \left\{A,\ B,\ C\right\},\ S\ =\ \left\{B,\ C,\ D\right\}\ $R = {A, B, C}, S = {B, C, D} 
$r⨝s\ =\Pi _{r.A,\ r.B,\ r.C,\ r.D}\left(\sigma _{r.B\ =\ s.B\ \wedge \ r.C\ =\ s.C}\ \left(r\ \times s\right)\right)$rs =Πr.A, r.B, r.C, r.D(σr.B = s.B  r.C = s.C (r ×s))

세타가 없으면 natural join 이라고 부르고, r 과 s 의 공동 Attribute 를 기준으로 공통된걸 묶는다.

세타가 있으면 타우의 판별식에 세타가 들어간다.

이 둘을 합쳐서 inner join 이라고도 부른다.

교환법칙, 결합법칙이 성립한다.

만약 겹치는 부분이 없거나 판별식에서 걸러지는게 없는 경우 공집합을 리턴하는게 아닌 데카트르 곱을 내놓는다.

3. Outer Join

$r\ltimes s$rs

원랜 모래시계 가로로 뉜거에 짝대기가 방향에 맞춰서 길어진모양이다.

Outer Join 인데, left join, right join, full join 으로 이루어져 있다.

inner join 에서 공통된 항이 없었던 경우 left 면 s 에 있었던 Attribute 를 null 로 채워서 넣는다.

반대방향도 마찬가지고 full 은 둘다 적용한다.

4. Assign

$r\gets s$rs

대입용이다. 대입을 통해 제거, 첨가, 수정을 할 수 있다.

r r - Expression 으로 제거

r r ∪ Expression 으로 첨가

r π (σ(r)) ∪ π (σ(r)) ... 로 업데이트.

모두 enum set 인 ('123', 12, 51) 같은걸로 대체해도 된다.

5. Null

$null$null

관련해서 연산시 처리할 규칙이 있다. 앞 글에서 설명했다.

6. Devision

$tmp1\ \gets \ \Pi _{R-S}\left(r\right);\ $tmp1  ΠRS(r); 
$tmp2\ \gets \ \Pi _{R-S}\left(\left(tmp1\ \times s\right)-\ \Pi _{R-S,\ S}\left(r\right)\right);\ $tmp2  ΠRS((tmp1 ×s) ΠRS, S(r)); 
$r\ \%\ s\ =\ \ tmp1\ -\ tmp2;$r % s =  tmp1  tmp2;

devision. R - S, S 는 결국 R 이라는것에 주목하자.

r 이 { (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 4), (3, 1)} 이고

s 가 {1, 2, 3} 이면

r % s 는 {1} 이다.

Extend Calculus

1. Generalize Projection

=> project 할 때 Atrribute 자리에 산수도 할 수 있다는 말.

2. Aggregated Function

$\combi{\ }_{G1,\ G2,\ G3...}\combi{G}_{F1\left(A1\right),\ F2\left(A2\right)...}\left(r\right)$ G1, G2, G3...GF1(A1), F2(A2)...(r)

aggregated function.

앞에 있는건 group 이고

F는 Aggregated Function 이다.

저 위치에 as 를 넣어서 rename을 하는 것도 허용해준다.

Example

- find largest salary

$\Pi _{salary}\ \left(instructor\right)\ -\ $Πsalary (instructor)  
$\Pi _{Instructor.salary}\left(\sigma _{instructor.salary\ <\ d.salary}\left(instructor\ \times \Rho _d\left(instructor\right)\right)\right)$ΠInstructor.salary(σinstructor.salary < d.salary(instructor ×Ρd(instructor)))

- theta join 과 natural join 의 차이점.

다른 과의 수업도 하는 교수님이 사라질 가능성

댓글 없음:

댓글 쓰기

List