# 관계대수와 SQL

관계해석(relational calculus)은 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인지는 명시하지않는 선언적인 언어, 관계대수(relational algebra)는 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어.

## 1. 관계대수

관계 대수는 기본적인 연산자들의 집합으로 이루어짐. ![](http://klas.khu.ac.kr/data/note/2012104079/editor/WE_140506223018hY3NoyDm.png) ![](http://www.jidum.com/upload/ckeditor/2016/07/20160727094514934.png)

### 1. 실렉션 연산자

: 한 릴레이션에서 selection 조건(=predicate)을 만족하는 투플들의 부분 집합을 생성한다. 즉, 주어진 조건을 만족하는 투플들만 걸러내는 연산으로 생각할 수 있다.

* 단항 연산자(하나의 입력 릴레이션에 적용)
* 결과릴레이션의 차수는 입력릴레이션의 차수와 같다.
* {=,<>,<=,<,>=,>}
*   {AND,OR,NOT}

    > <애트리뷰트> 비교연산자 <상수> <애트리뷰트> 비교연산자 <애트리뷰트> <조건> AND/OR <조건> NOT <조건>

### 2. 프로젝션

: 한 릴레이션의 애트리뷰트들의 부분집합.

* 새로운 릴레이션의 차수는 애트리뷰트 리스트내의 애트리뷰트와 같다.
* 프로젝션 연산의 결과 릴레이션에는 입력릴레이션으로부터 골라낸 일부 애트리뷰트만 포함되므로 중복된 투플들이 존재할 수 있다.
* 키가 포함되어있으면 중복이 존재하지 않는다.

### 3.집합 연산자

: 릴레이션이 투플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용된다.

*   **합집합 호환(union compatible)**

    R1(A1,A2,...,An),R2(B1,B2,...,Bm)이 합잡합 호환일 필요충분조건은 **n=m**이고, 모든 1<=i<=n에 대해 domain(Ai)=domain(Bi)이다. 즉, 두릴레이션의 애트리뷰트 수가 같고 대응되는 도메인이 같은것.

#### 합집합 연산자

R∪S, R 과 S 두 릴레이션의 합집합 연산 결과 릴레이션의 차수는 R or S의 차수와 같으며,결과 릴레이션의 애트리뷰트 이름들은 R or S의 애트리뷰트들의 이름과 같다.

#### 교집합 연산자

R∩S,R 과 S 두 릴레이션의 교집합 연산 결과 릴레이션의 차수는 R or S의 차수와 같으며,결과 릴레이션의 애트리뷰트 이름들은 R or S의 애트리뷰트들의 이름과 같다.

#### 차집합 연산자

R-S,R 과 S 두 릴레이션의 합집합 연산 결과 릴레이션의 차수는 R or S의 차수와 같으며,결과 릴레이션의 애트리뷰트 이름들은 R or S의 애트리뷰트들의 이름과 같다.

#### 카티션곱

:한 릴레이션의 투플들을 다른 릴레이션의 투플들과 연관시키기 위해서 흔히 두 릴레이션의 투플들을 결합해야하는 경우가 있다. R X S의 차수는 n+m이고, 카디날리티는 i\*j이고, 애트리뷰트(A1,..,An,B1,...Bm)이다. 카티션곱의 결과 릴레이션의 크기가 매우 클 수 있고, 원하는 결과는 일부분인 경우가 대부분이므로 유용한 연산자는 아니다

### 4. 조인연산자

: 두 개의 릴레이션으로 부터 연관된 투플들을 결합하는 연산자. (두 개 이상의 릴레이션 관계를 다룰 때 매우 중요)

#### 세타조인 & 동등조인

R과 S의 세타조인의 결과는 차수는 n+m이고, 애트리뷰트(A1,..,An,B1,...Bm)이며, 조인조건을 만족하는 투플로 이루어진 릴레이션이다. 세타는 **{=,<>,<=,<,>=,>}**&#xC911;의 하나이다. 동등 조인은 세타조인 중에서 비교연산자가 **=**&#xC778; 조인.

> 동등조인의 결과는 R과 S의 카티션 곱에 실렉션을 적용한 것과 같다.

#### 자연조인

동등 조인의 결과 릴레이션에서 조인 애트리뷰트를 한개 제외한 것. 가장 많이 사용된다.

### 5. 디비전 연산자

R(A1,...An,B1,..,Bm), S(B1,..,Bm)인 두릴레이션의 R÷S는 차수가 n이고, S에 속하는 모든 투플에 대해 R에 존재하는 투플들의 집합.

### 6. 관계 대수의 한계

1. 산술 연산을 할 수 없다.
2. 집단 함수를 지원하지 않는다.
3. 정렬을 나타낼 수 없다.
4. 데이터베이스를 수정할 수없다.
5. 중복된 투플을 나타내는 것이 필요할 때가 있는데 이를 명시하지 못한다.

### 7. 추가된 관계대수 연산자

#### 집단함수(SUM, AVG, MAX,MIN,COUNT)

#### 그룹화

#### 외부조인

: 상대 릴레이션에서 대응되는 투플을 갖지 못하는 투플이나 조인 애트리뷰트에 널값이 들어있는 투플들을 다루기 위해서 확장한것. 두 릴레이션에 대응되는 투플들을 결합하면서 , 대응되는 투플을 갖지 않는 투플과 조인 애트리뷰트에 널값을 갖는 투플도 포함. ![](http://cfile2.uf.tistory.com/image/202F28104AC82E0816B31B)
