![](https://velog.velcdn.com/images/rg970604/post/0711a636-6fcd-4c1b-b725-5aff0788c602/image.png)
- 관계 데이터 연산의 목표는 기존의 릴레이션으로 새로운 릴레이션을 생성하는 것이다.
![](https://velog.velcdn.com/images/rg970604/post/d4228ab1-d6fb-4f29-804d-a3178c2fb263/image.png)
- 관계 대수는 절차적 언어, 관계 해석은 비절차적 언어이다.
- 일반 집합 연산자와 순수 관계 연산자의 차이를 이해하고 질의 표현법을 익히는 것이 목표다.
![](https://velog.velcdn.com/images/rg970604/post/410be2a1-d7b5-449a-aaef-216134ac75f3/image.png)
- 데이터 모델은 데이터구조+연산+제약조건 으로 이루어진다.
![](https://velog.velcdn.com/images/rg970604/post/3f269ef3-6d10-49b0-b7fa-0551cf4a7124/image.png)
- 관계 데이터 연산은 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것이다.
- 관계 데이터 연산에는 크게 관계대수와 관계 해석이 있다.
- 관계대수는 원하는 결과를 얻기 위해 데이터 처리과정을 순서대로 기술한 것이거, 관계 해석은 원하는 결과를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술한다.
![](https://velog.velcdn.com/images/rg970604/post/1c483b3c-dfd5-480d-8287-8e7b838c9c94/image.png)
- 관계 대수의 정의는 위와 같다.
- 릴레이션을 처리하는 연산자는 8개가 있으며, 일반 집합 연산자와 순수 관계 연산자로 분류된다.
- 피연산자도, 연산의 결과도 릴레이션인 "폐쇄 특성"이 있다.
![](https://velog.velcdn.com/images/rg970604/post/4a5aedb5-9f14-46ec-b417-2b9b98beed7a/image.png)
- 관계 대수의 연산자는 일반집합/순수관계로 구분된 위 8가지다.
![](https://velog.velcdn.com/images/rg970604/post/0202da70-773f-4a2b-9931-7b69405e8304/image.png)
- 일반 집합 연산자는 릴레이션이 투플의 집합이라는 개념을 이용하는 연산자다. 합집합, 교집합, 차집합, 카티션 프로덕트 총 4가지가 있다. 정의는 위와 같다.
- 카티션 프로덕트는 릴레이션이 연결될 수 있는 모든 경우의 수를 고려한 것이다.
![](https://velog.velcdn.com/images/rg970604/post/df5620b9-54aa-4623-90d2-8a5d53739d02/image.png)
- 일반 집합 연산자를 도식화해 표현하면 다음과 같다.
![](https://velog.velcdn.com/images/rg970604/post/85f08442-8b4d-4e5d-ae1e-2f2845a0bea8/image.png)
- 순수 관계 연산자는 기존 릴레이션의 구조와 특성을 이용한다. 셀렉트, 프로젝트, 조인, 디비전 총 4가지의 연산자를 갖는다.
- 셀렉트는 릴레이션 R에서 조건을 만족하는 투플을 반환한다.
- 프로젝트는 릴레이션 R에서 주어진 속성들의 값으로만 구성된 투플을 반환한다.
- 조인은 공통 속성을 이용해 릴레이션 R과 S의 투플들을 연결하여 만들어진 새로운 투플들을 반환한다.
- 디비전은 릴레이션 S의 모든 투플과 관련이 있는 릴레이션 R의 투플을 반환한다.
![](https://velog.velcdn.com/images/rg970604/post/589e8c2a-5ac3-4d23-9aff-8fde7244aed4/image.png)
- 순수 관계 연산자를 도식화했다. 셀렉트는 가로로, 프로젝트는 세로로 뽑아내는 것을 볼 수 있다.
- 디비전은 R에서 S에 포함된 속성을 공통적으로 가진 투플을 뽑아내며, 조인은 R과 S의 공통 속성을 연결시켜 하나의 새로운 투플을 만들고 반환한다.
![](https://velog.velcdn.com/images/rg970604/post/0670a332-df58-4d02-bcfd-935df4ddd352/image.png)
- 일반 집합 연산자는 피연산자가 두개 필요하다. 즉 릴레이션이 두개여야 한다.
- 합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병이 가능해야 한다.
- 합병 가는 조건은 두 릴레이션의 차수와, 대응되는 속성의 도메인이 같아야 한다.
![](https://velog.velcdn.com/images/rg970604/post/f895402b-5e93-4c7c-b907-94461bb33ba0/image.png)
- 위쪽의 고객 릴레이션, 직원 릴레이션은 나이와 직위의 속성과 도메인이 다르므로 합병이 불가능하다.
- 반면 아래쪽은 속성과 도메인이 모두 같아 합병이 가능하다.
![](https://velog.velcdn.com/images/rg970604/post/d4f8df85-2149-4224-9faa-a4168f95e49f/image.png)
- 합집합은 R U S 로 표현된다. 두 릴레이션에 속하는 모든 투플로 결과 릴레이션이 구성된다.
![](https://velog.velcdn.com/images/rg970604/post/fd6d54a1-df67-49c1-a357-9c8ca90030ac/image.png)
- 차수는 릴레이션 R과 S의 차수와 같고, 카디널리티는 R과 S의 카디널리티를 더한 것과 같거나 적다(적은 경우는 중복 때문에).
- 교환적, 결합적 특징이 있다.
![](https://velog.velcdn.com/images/rg970604/post/032eed99-aa8e-48b8-9cc0-9914a0ca0bc3/image.png)
- 교집합은 R과 S에서 중복된 값으로 결과 릴레이션으로 구성된다.
![](https://velog.velcdn.com/images/rg970604/post/ca8c9a3f-8269-42f9-a257-0f99a9860887/image.png)
- 차수는 릴레이션 R과 S의 차수와 같고, 카디널리티는 릴레이션 R과 S의 어떤 카디널리티보다 크지 않다.
- 교환적, 결합적 특징이 있다.
![](https://velog.velcdn.com/images/rg970604/post/fa8e3a4b-48cb-4922-b339-8df64f2c8f48/image.png)
- 차집합은 R에는 존재하고 S에서는 존재하지 않는 투플이 결과 릴레이션이 된다.
- 차집합은 교환적, 결합적 특징이 없다. R-S != S-R이다.
![](https://velog.velcdn.com/images/rg970604/post/a9fd6fa4-2e23-48ec-a259-d54489913eb4/image.png)
- 카티션 프로덕트는 릴레이션 R과 S에 속한 각 투플을 모두 연결하여 만들어진 새로운 투플로 결과 릴레이션을 구성한다.
![](https://velog.velcdn.com/images/rg970604/post/b20015c9-6a63-4cbb-a11d-41c29281d156/image.png)
- 차수는 릴레이션 R과 S의 차수를 더한 것과 같고, 카디널리티는 R과 S의 카디널리티를 곱한 것과 같다
- 교환적, 결합적 특징이 있다.
![](https://velog.velcdn.com/images/rg970604/post/2b319e2d-65c7-4df5-8f41-1ab5589386cf/image.png)
- 셀렉트는 릴레이션에서 조건을 만족하는 투플만 선택해 결과 릴레이션을 구성한다.
- 하나의 릴레이션을 대상으로 연산을 수행한다.
- 수학적 표현법은 시그마로 표현하며 데이터 언어적으로는 where을 사용한다.
- 조건식은 속성과 상수의 비교나 속성들 간의 비교로 표현하며, 비교연산자와 논리연산자를 이용해 작성한다.
![](https://velog.velcdn.com/images/rg970604/post/3c519842-7f5c-4e05-a9ea-c371596bd2f2/image.png)
![](https://velog.velcdn.com/images/rg970604/post/8ae1e4f9-2e2e-4310-a547-a88e8274cfdd/image.png)
![](https://velog.velcdn.com/images/rg970604/post/9ce359de-13cf-4833-b19d-4981c99af177/image.png)
- 위 투플에서 "고객 릴레이션에서 등급이 gold인 투플을 검색하시오"라는 예제가 있을 경우 다음과 같은 조건식과 결과 릴레이션이 생성된다.
![](https://velog.velcdn.com/images/rg970604/post/478ff33a-189b-4b1d-abaa-02c766c3984d/image.png)
- 셀렉트를 통한 결과 릴레이션은 연산 대상 릴레이션의 수평적 부분 집합이다.
![](https://velog.velcdn.com/images/rg970604/post/69c0b606-b3a1-47f2-8d47-1b2b2c433726/image.png)
- 위 예제에서는 다음과 같은 방법으로 결과 릴레이션을 뽑아낸다.
![](https://velog.velcdn.com/images/rg970604/post/fe31d166-3581-4aed-9002-0ff6036f7f8d/image.png)
![](https://velog.velcdn.com/images/rg970604/post/583a6c06-b7c0-4454-835d-2f36fbcabf62/image.png)
- 프로젝트 연산자는 릴레이션에서 선택한 속성의 값으로 결과 릴레이션을 구성한다.
- 하나의 릴레이션을 대상으로 연산을 수행한다.
- 수학적/데이터언어적 표현법은 다음과 같다.
![](https://velog.velcdn.com/images/rg970604/post/14b7131e-f7db-4415-a4a0-b3f6b3afb485/image.png)
![](https://velog.velcdn.com/images/rg970604/post/1006ccf8-9287-4ac7-81f9-88dc3379599c/image.png)
- 여섯개 속성 중에서 특정 3개 속성을 검색할 수 있다.
![](https://velog.velcdn.com/images/rg970604/post/d0772cc4-80b5-46cf-9c1c-fefdc418a8e1/image.png)
- 수평적 부분집합인 셀렉트와 달리 프로젝트는 수직적 집합이 이루어진다.
![](https://velog.velcdn.com/images/rg970604/post/bddf775b-e5b1-4ce3-b705-6b3046266d74/image.png)
- 조인 속성을 이용해 두 릴레이션을 조합한 결과 릴레이션을 구성할 수 있다.
- 두 릴레이션이 공통으로 가진 속성이 조인 속성이다.
- 표현법은 위와 같으며, 자연 조인이라고도 한다.
![](https://velog.velcdn.com/images/rg970604/post/ca594e12-4dc0-4424-a7b4-c2c639da0cec/image.png)
![](https://velog.velcdn.com/images/rg970604/post/36bfab13-91a7-4588-8b76-9d342fb74a6e/image.png)
- 조인 연산을 통해 조인 속성으로 새로운 결과 릴레이션을 구성한다.
![](https://velog.velcdn.com/images/rg970604/post/cce5272d-180a-493d-907c-b4e5e3bfb7d6/image.png)
- 디비전은 두 가지의 릴레이션으로 2의 모든 투플과 관련있는 1의 투플로 결과 릴레이션을 구성한다.
![](https://velog.velcdn.com/images/rg970604/post/eabc61d5-750b-4e8e-bb4d-6f076723405c/image.png)
- 우수등급 릴레이션인 gold와 관련된 1의 투플이 반환된다.
![](https://velog.velcdn.com/images/rg970604/post/82379b56-a92b-44c9-a8f6-528ed937d464/image.png)
- 주문 내역 릴레이션과 제품 1과 제품 2와 관련된 투플을 제품 1,2의 속성을 제외하고 반환한다.
![](https://velog.velcdn.com/images/rg970604/post/d87ee6be-22c2-4a1d-9920-f093e58c1db7/image.png)
![](https://velog.velcdn.com/images/rg970604/post/2df049e4-6059-4363-aa74-af1e1c629192/image.png)
- 등급이 gold인 고객의 이름과 나이를 검색하는 연산은 다음과 같다.
![](https://velog.velcdn.com/images/rg970604/post/e3276517-8dca-4e4d-9854-782e7add9d82/image.png)
- 고객이름이 원유선인 고객의 등급과 주문제품, 주문수량을 검색하려면 다음처럼 조인 속성을 이용한다.
![](https://velog.velcdn.com/images/rg970604/post/dbe7ac90-84ef-468d-bd6c-77c4ee81a488/image.png)
- 주문수량이 10개 미만인 주문 내역을 삭제하려면 주문 릴레이션에서 수량이 10개 이하인 릴레이션을 빼면 된다.