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
select * from r where p;
2. Project
select A1, A2, Ac ... from r;
3. Rename
select --as A1, -- as A2, -- as A3 from r as x;
4. Cartes Mul
select * from r, s;
5. Union
r union s;
6. Except
r except s;
Additional Calculus
1. intersec
단순히 교집합이다.
2. (Inner)Join
세타가 없으면 natural join 이라고 부르고, r 과 s 의 공동 Attribute 를 기준으로 공통된걸 묶는다.
세타가 있으면 타우의 판별식에 세타가 들어간다.
이 둘을 합쳐서 inner join 이라고도 부른다.
교환법칙, 결합법칙이 성립한다.
만약 겹치는 부분이 없거나 판별식에서 걸러지는게 없는 경우 공집합을 리턴하는게 아닌 데카트르 곱을 내놓는다.
3. Outer Join
원랜 모래시계 가로로 뉜거에 짝대기가 방향에 맞춰서 길어진모양이다.
Outer Join 인데, left join, right join, full join 으로 이루어져 있다.
inner join 에서 공통된 항이 없었던 경우 left 면 s 에 있었던 Attribute 를 null 로 채워서 넣는다.
반대방향도 마찬가지고 full 은 둘다 적용한다.
4. Assign
대입용이다. 대입을 통해 제거, 첨가, 수정을 할 수 있다.
r ← r - Expression 으로 제거
r ← r ∪ Expression 으로 첨가
r ← π (σ(r)) ∪ π (σ(r)) ... 로 업데이트.
모두 enum set 인 ('123', 12, 51) 같은걸로 대체해도 된다.
5. Null
관련해서 연산시 처리할 규칙이 있다. 앞 글에서 설명했다.
6. Devision
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
aggregated function.
앞에 있는건 group 이고
F는 Aggregated Function 이다.
저 위치에 as 를 넣어서 rename을 하는 것도 허용해준다.
Example
- find largest salary
- theta join 과 natural join 의 차이점.
다른 과의 수업도 하는 교수님이 사라질 가능성
댓글 없음:
댓글 쓰기