8 분 소요


  • 관계 데이터 모델의 데이터는 릴레이션들로 구성된다.
  • 릴레이션에 대한 연산을 어떻게 할까? 한번 알아보자.


▶ 관계 대수

개념

  • 릴레이션(튜플들의 집합)을 처리하기 위한 연산의 집합을 말한다.
  • 집합이기 때문에 폐쇄성질을 갖고 있어 중첩된 수식 표현이 가능하다.

    • 따라서 각 연산의 피연산자와 연산 결과가 릴레이션이다. (릴레이션 + 릴레이션 = 릴레이션)
  • 수학적 집합 이론에서부터 나온 일반 집합 연산자와 DB에 적용할 수 있도록 개발된 순수 관계 연산자가 있다.




▶ 일반 집합 연산자

▷ 합병 가능 조건 (집합 연산자 특징)

  1. 연산하고자 하는 두 릴레이션의 차수가 같아야 한다.(== 속성 개수가 같아야 한다.)
  2. 2개의 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 한다.(도메인이 같으면 속성의 이름은 달라도 됨)

⚠️ 합집합, 교집합, 차집합은 합병 가능 조건을 만족해야하지만, ⭐카티션 프로덕트는 합병 가능 여부와 상관없이 연산이 가능하다. (튜플 집합을 기준)


▷ 합집합 [ ∪ ]

개념

  • 차수(R∪S): 차수(R) = 차수(S)
  • 카디널러티: 𝑅 ∪ 𝑆 𝑅 + 𝑆
    • 릴레이션의 특성상(중복 튜플이 존재할 수 없다) 결과로 나타나는 튜플은 단 한 개이다.
  • 교환법칙, 결환법칙 성립 O

** 차수: 속성의 개수 ** 카디널러티: 튜플의 개수


▷ 교집합 [ ∩ ]

개념

  • 두 릴레이션 𝑅과 𝑆에 동시에 속해 있는 튜플로만 구성된 릴레이션

  • 차수(𝑅 ∩ 𝑆) = 차수(𝑅) = 차수(𝑆)

  • 카디널러티 = 𝑅 ∩ 𝑆 ≤ min ( 𝑅 , 𝑆 )
  • 교환법칙, 결환법칙 성립 O


▷ 차집합 [ - ]

개념

  • 릴레이션 𝑅에는 있지만 𝑆에는 없는 튜플로만 구성된 릴레이션

  • 차수(𝑅 − 𝑆) = 차수(𝑅) = 차수(𝑆)

  • 카디널러티 = 𝑅 − 𝑆 𝑅
  • 교환법칙, 결환법칙 성립 X


▷ 카티션 프로덕트 [ X ]⭐

개념

  • 두 릴레이션에 있는 튜플들을 가능한 조합으로 모두 연결시키는 연산
  • 매우 큰 릴레이션을 만들어 냄
  • 튜플이 몇 개든 상관 X → 합병 가능 조건 필요 X

  • 차수(𝑅 × 𝑆) = 차수(𝑅) + 차수(𝑆)
  • 카디널러티 = 𝑅 × 𝑆 = 𝑅 × 𝑆
  • 교환법칙, 결환법칙 성립 O




▶ 순수 관계 연산자

▷ 셀렉트 [ ∂ ]

개념

  • 릴레이션에서 주어진 조건을 만족하는 튜플들을 골라 연산하는 것
  • 수평적 부분집합
    • 수행 전과 후의 차수 동일(카티넬러티는 차수 같거나 작아짐)


예시

<고객 릴레이션=""> | 아이디 | 이름 | 나이 | 등급 | 적립금 | | :--------: | :----: | :--: | :----: | :----: | | sssienlove | 박시은 | 6 | gold | 1004 | | koriov | 김춘자 | 80 | silver | 3000 | | kimchi03 | 홍길동 | 64 | gold | 8000 | | youmeo | 한미오 | 22 | vip | 2300 |
<고객 릴레이션에서="" 등급이="" gold인="" 튜플을="" 검색해보자=""> ![](https://velog.velcdn.com/images/sieunpark/post/3502e79c-28ee-433f-b105-211a8927e214/image.jpg) | 아이디 | 이름 | 나이 | 등급 | 적립금 | | :--------: | :----: | :--: | :--: | :----: | | sssienlove | 박시은 | 6 | gold | 1004 | | kimchi03 | 홍길동 | 64 | gold | 0 |

<고객 릴레이션에서 등급이 gold이고, 적립금이 2000이상인 튜플을 검색해보자> ![](https://velog.velcdn.com/images/sieunpark/post/a5a73780-0d90-488b-aced-0e4022a7e433/image.jpg) | 아이디 | 이름 | 나이 | 등급 | 적립금 | | :------: | :----: | :--: | :--: | :----: | | kimchi03 | 홍길동 | 64 | gold | 8000 |

## ▷ 프로젝트 [ π ] > 개념 - 한 릴레이션에서 지정된 속성들을 선택하는 연산 - 릴레이션의 수직적 부분집합 - ⚠️결과에 튜플이 중복되는 경우 제거된다! - 결과도 튜플의 집합(릴레이션)이기 때문이다. 릴레이션은 중복이 존재하면 안된다. ![](https://velog.velcdn.com/images/sieunpark/post/57ccd308-7798-40a0-b2cb-64e45d7f67e0/image.png)
> 예시 <고객 릴레이션=""> | 아이디 | 이름 | 나이 | 등급 | 적립금 | | :--------: | :----: | :--: | :----: | :----: | | sssienlove | 박시은 | 6 | gold | 1004 | | koriov | 김춘자 | 80 | silver | 3000 | | kimchi03 | 홍길동 | 64 | gold | 8000 | | youmeo | 한미오 | 22 | vip | 2300 |
<고객 릴레이션에서="" 등급을="" 검색해보자=""> ![](https://velog.velcdn.com/images/sieunpark/post/8e05d9a4-f247-4d2e-b3c3-c227454f69fc/image.jpg) | 등급 | | :----: | | gold | | silver | | vip | 중복되는 튜플이 존재할 수 없다는 릴레이션의 기본 특성을 유지한다.
<고객 릴레이션에서 이름, 등급, 적립금을 검색해보자> ![](https://velog.velcdn.com/images/sieunpark/post/a392d97c-d9e2-44c7-bb7e-55ca96c1ab81/image.jpg) | 이름 | 등급 | 적립금 | | :----: | :----: | :----: | | 박시은 | gold | 1004 | | 김춘자 | silver | 3000 | | 홍길동 | gold | 8000 | | 한미오 | vip | 2300 |

## ▽ 조인 [ ⋈ ] > 개념 - 공통 속성(조인 속성)을 기준으로 두 릴레이션을 조합하여 하나의 결과 릴레이션을 만든다. - ⭐조인 vs 카티션 프로젝트 카티션 프로젝트(조건 없이 모든 튜플들만 결합)와 달리 조인은 특정 조건을 만족하는 튜플들만 결합 - 여러 종류의 조인 연산이 존재한다. - 조인 연산을 다른 연산으로 대체할 수 있다. ![](https://velog.velcdn.com/images/sieunpark/post/bf496109-6c03-4dd7-ad65-4a469115238f/image.jpg)
### ① 세타 조인 ( 𝑅 ⋈𝐴𝜃𝐵 𝑆 ) ![](https://velog.velcdn.com/images/sieunpark/post/1d916fff-1d3f-4fc6-99c4-321e818b3548/image.jpg) > 개념 - 비교 연산자( =,<>,<=,<,>=,> )를 사용하여 조건을 만족하는 튜플들을 결합한 조인 - 𝜃: 조인 조건에 사용되는 비교 연산자

### ② 동등 조인 ( 𝑅 ⋈𝐴=𝐵 𝑆 ) ![](https://velog.velcdn.com/images/sieunpark/post/f7575d4c-2918-4d18-bedf-37251cce79ca/image.jpg) > 개념 - 동등 조인(=내부조인)은 세타 조인 중에서 비교 연산자가 =인 조인 - 즉, 릴레이션 A의 속성과 릴레이션 B의 어트리뷰트가 값이 같은 속성만 결합시키는 것 - 일반적으로 조인이라 하면 동등 조인을 의미한다. - 동등 조인 연산에서는 자연 조인과 달리 속성이 중복되어 나타난다. - 결과 차수 = 𝑅의 차수 + 𝑆의 차수
> 동등조인 예시 < 고객 릴레이션 > | 아이디 | 이름 | 나이 | 등급 | | :---------------------------------------------: | :----: | :--: | :----: | | sssienlove | 박시은 | 6 | gold | | koriov | 김춘자 | 80 | silver | | kimchi03 | 홍길동 | 64 | gold | | youmeo | 한미오 | 22 | vip |
< 주문 릴레이션 > | 주문번호 | 주문고객 | 주문 제품 | 수량 | | :------: | :---------------------------------------------: | :-------: | :--: | | 10 | sssienlove | 돈가스 | 12 | | 11 | koriov | 칼국수 | 8 | | 12 | kimchi03 | 우동 | 6 |
< 결과 릴레이션 ( 고객 ⋈ 주문 ) > | 아이디 | 이름 | 나이 | 등급 | 주문번호 | 주문고객 | 주문 제품 | 수량 | | :---------------------------------------------: | :----: | :--: | :----: | :------: | :---------------------------------------------: | :-------: | :--: | | sssienlove | 박시은 | 6 | gold | 10 | sssienlove | 돈가스 | 12 | | koriov | 김춘자 | 80 | silver | 11 | koriov | 칼국수 | 8 | | kimchi03 | 홍길동 | 64 | gold | 12 | kimchi03 | 우동 | 6 |
- 주문 릴레이션은 고객 릴레이션의 아이디 속성을 외래키로 가지고 있다. - 이때 주문고객 속성은 고객 릴레이션의 기본키인 아이디를 참조한 것이며, 두 릴레이션의 관계를 성사시킨다.

### ③ 자연 조인 ![](https://velog.velcdn.com/images/sieunpark/post/f92a8ea8-5913-4e01-99c8-52498f908a0f/image.jpg) > 개념 - 동등 조인의 결과에서 조인 속성을 제외한 조인 (중복 속성 제거)
| 아이디 | 이름 | 나이 | 등급 | 주문번호 | 주문 제품 | 수량 | | :---------------------------------------------: | :----: | :--: | :----: | :------: | :-------: | :--: | | sssienlove | 박시은 | 6 | gold | 10 | 돈가스 | 12 | | koriov | 김춘자 | 80 | silver | 11 | 칼국수 | 8 | | kimchi03 | 홍길동 | 64 | gold | 12 | 우동 | 6 |

## ▷ 디비전 [ ÷ ] > 개념 - R ÷ S : 릴레이션 S의 모든 튜플과 관련 있는 릴레이션 R의 튜플로 결과 릴레이션을 구성한다 - 단, 릴레이션 R이 릴레이션 S의 모든 속성을 포함하고 있어야 연산이 가능하다. (S의 모든 속성과 도메인이 같은 속성을 R이 포함하고 있어야 한다는 뜻)
> 예시 < 고객 릴레이션 > | 아이디 | 이름 | 나이 | 등급 | 적립금 | | :--------: | :----: | :--: | :----: | :----: | | sssienlove | 박시은 | 6 | gold | 1004 | | koriov | 김춘자 | 80 | silver | 3000 | | kimchi03 | 홍길동 | 64 | gold | 8000 | | youmeo | 한미오 | 22 | vip | 2300 |
< 우수 등급 릴레이션 > | 등급 | | :--: | | gold |
< 결과 릴레이션 > | 아이디 | 이름 | 나이 | 적립금 | | :----: | :----: | :--: | :----: | | koriov | 김춘자 | 80 | 3000 | | youmeo | 한미오 | 22 | 2300 |
![](https://velog.velcdn.com/images/sieunpark/post/41af1d8a-57d8-45ac-b01c-23740aa0cb46/image.png)
---
# ▶ 관계 대수의 확장 > 관계 대수 연산을 확장하여 유용한 연산을 추가 정의
## ▷ 세미 조인 [ ⋉ ] > 개념 - 𝑅(𝑋)에 대한 𝑆(𝑌)의 세미 조인: 𝑅 ⋉ 𝑆 - 자연 조인에 참여할 수 있는 튜플들만 골라내는 것 - 교환법칙 성립x
> 예시 - 주문한 적이 있는 고객 데이터 검색 ![](https://velog.velcdn.com/images/sieunpark/post/b0903aea-305c-490d-99b7-743e4d3f065e/image.png)

## ▽ 외부 조인 (Outer join) - 한 릴레이션에 있는 튜플이 조인할 상대 릴레이션에 대응되는 튜이 없을 경우, 상대를 널(null) 튜플로 만들어 결과 릴레이션에 포함 - 누락 정보를 처리하기 위한 조인의 확장 - ex) 주문한 적이 없는 고객도 null로 채워 포함시킴
### ① 왼쪽 외부 조인 [ ⟕ ] - 왼쪽에 있는 튜플들을 기본적으로 포함시키고 관련된 튜플이 없으면 null값으로 표시 ![](https://velog.velcdn.com/images/sieunpark/post/d83478c4-96ea-4267-887c-b0f29c07e6cb/image.png)
### ② 오른쪽 외부 조인 [ ⟖ ] - 오른쪽에 있는 튜플들을 기본적으로 포함시키고 관련된 튜플이 없으면 null값으로 표시 ![](https://velog.velcdn.com/images/sieunpark/post/a1bdc517-0bbd-4f05-bab6-b72998f6ed64/image.png)
### ③ 완전 외부 조인 [ ⟗ ] - 𝑅과 𝑆의 모든 튜플들을 결과에 포함시키고, 상대 릴레이션에 관련된 튜플이 없으면 결과 릴레이션에서 상대 릴레이션의 속성들은 널 값으로 채움 ![](https://velog.velcdn.com/images/sieunpark/post/0ef817ae-6c03-4e06-8367-6c36e6f7d5cc/image.png)

## ▷ 집계 함수 | 집계 함수 | 의미 | | :-------: | :----: | | SUM | 합계 | | AVG | 평균 | | MAX | 최대값 | | MIN | 최소값 | | COUNT | 개수 |
> 예시 ![](https://velog.velcdn.com/images/sieunpark/post/60169d19-7ad4-4e0f-8ec9-b13db67b46f5/image.png)

## ▷ 그룹핑 > 개념 - 릴레이션은 그룹핑 속성 값에 의해 분할되고, 각 그룹에 속하는 튜플들에 대해 집계 함수를 적용 - GROUPA FB (R) - F: 집계 함수 - A: 그룹핑 속성 - B: 집계 함수 적용 대상 애트리뷰트
> 예시 사원 전체의 급여 평균 값을 계산하는 것이 아닌 사원이 속해있는 부서별로 급여 평균 값 계산 ![](https://velog.velcdn.com/images/sieunpark/post/2a51ea10-a2b5-47db-a380-eb53bd3b64d3/image.png)
---
# ▶ 정리 문제 > 다음 질의문을 관계 대수로 표현하시오. ![](https://velog.velcdn.com/images/sieunpark/post/7e04bbde-c66f-417f-831c-f21defd5d8b4/image.png) 1. 등급이 gold인 고객의 이름과 나이를 검색하라. ![](https://velog.velcdn.com/images/sieunpark/post/7d1d5004-e5fc-4ae7-9cc0-e0b41663a837/image.jpg)
2. 원유선 고객에 대해, 등급, 주문한 제품,주문 수량을 검색하라. ![](https://velog.velcdn.com/images/sieunpark/post/fcdd55ab-67d9-47d7-bde5-be0bb757b872/image.jpg)
3. 주문수량이 10개 미만인 내역을 제외한 주문 내역을 검색하라. ![](https://velog.velcdn.com/images/sieunpark/post/62d8b702-3cee-4c4e-bc51-81c16f969108/image.jpg)
4. <‘delta’, ‘시은’, 21, ‘vip’> 고객을 삽입하라. ![](https://velog.velcdn.com/images/sieunpark/post/43402fa0-eee4-400e-b787-9bf5528ba768/image.jpg)
5. 아이디가 orange인 고객을 삭제하라. ![](https://velog.velcdn.com/images/sieunpark/post/b79a2e25-d854-42a8-96bb-8905d2998e14/image.jpg)
> 모든 과목을 수강(등록)한 학생의 학번과 이름을 검색하 > 는 질의를 관계 대수로 표현하시오. ![](https://velog.velcdn.com/images/sieunpark/post/424a2db4-175b-4fd2-9947-199bb822aa4b/image.png) ![](https://velog.velcdn.com/images/sieunpark/post/6dbd2f7f-cf4b-4598-8f15-4cb7312d3c31/image.jpg)
---
# 📎참조 - https://archive-me-0329.tistory.com/13 - https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%EA%B4%80%EA%B3%84-%EB%8C%80%EC%88%98-%EA%B4%80%EA%B3%84-%ED%95%B4%EC%84%9D-SQL-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC

태그: ,

카테고리:

업데이트:

댓글남기기