[DB] 관계대수 연산 예시
1. 마당서점 릴레이션 예시
- 다음은 앞으로의 관계대수 예시에서 계속 사용될 릴레이션 목록이다.
1.1. 고객
고객번호 | 이름 | 주민번호 | 주소 | 핸드폰 |
---|---|---|---|---|
1 | 박지성 | 810101-1111111 | 영국 맨체스타 | 000-5000-0001 |
2 | 김연아 | 900101-2222222 | 대한민국 서울 | 000-6000-0001 |
3 | 장미란 | 830101-2333333 | 대한민국 강원도 | 000-7000-0001 |
4 | 추신수 | 820101-1444444 | 미국 클리블랜드 | 000-8000-0001 |
1.2. 도서
도서번호 | 도서이름 | 출판사 | 가격 |
---|---|---|---|
1 | 축구의 역사 | 굿스포츠 | 7000 |
2 | 축구아는 여자 | 나무수 | 13000 |
3 | 축구의 이해 | 대한미디어 | 22000 |
4 | 골프 바이블 | 대한미디어 | 35000 |
5 | 피겨 교본 | 굿스포츠 | 8000 |
1.3. 주문
고객번호 | 도서번호 | 판매가격 | 주문일자 |
---|---|---|---|
1 | 1 | 7000 | 2014-07-01 |
1 | 2 | 13000 | 2014-07-03 |
2 | 5 | 8000 | 2014-07-03 |
3 | 2 | 13000 | 2014-07-04 |
4 | 4 | 35000 | 2014-07-05 |
1 | 3 | 22000 | 2014-07-07 |
4 | 3 | 22000 | 2014-07-07 |
2. 셀렉션(Selection)
- 릴레이션의 튜플을 추출하는 단항 연산자
- 찾고자 하는 튜플의 조건(predicate)을 명시하고, 그 조건에 만족하는 튜플을 반환함
- 형식: $\; {\large\sigma}_{<\mathrm{condition}>}(R) \;$ ($R$은 릴레이션)
질의 2-1
마당서점에서 판매하는 도서 중 8000원 이하인 도서를 검색하시오.
정답
${\large\sigma}_{\mathrm{가격} \leq 8000}(\mathrm{도서})$
질의 결과
도서번호 | 도서이름 | 출판사 | 가격 |
---|---|---|---|
1 | 축구의 역사 | 굿스포츠 | 7000 |
5 | 피겨 교본 | 굿스포츠 | 8000 |
2.1. 셀렉션의 확장
여러 개의 조건을 $\wedge$(and), $\vee$(or), $\neg$(not) 기호를 사용하여 복합조건을 표시할 수 있음
예를 들어 질의 “가격이 8000원 이하이고 도서번호가 3 이상인 책을 찾아라”는 다음과 같이 표현함
- ${\large\sigma}_{(\mathrm{가격} \leq 8000 \; \wedge \; \mathrm{도서번호} \geq 3)}(\mathrm{도서})$
3. 프로젝션(Projection)
- 릴레이션의 속성을 추출하는 단항 연산자
- 형식: $\; {\large\pi}_{<\mathrm{list \; of \; attribute}>}(R) \;$ ($R$은 릴레이션)
질의 2-2
신간도서 안내를 위해 고객의 정보(이름, 주소, 핸드폰)가 적힌 카탈로그 주소록을 만드시오.
정답
$\; {\large\pi}_{\mathrm{이름, \; 주소, \; 핸드폰}}(\mathrm{고객}) \;$
질의 결과
이름 | 주소 | 핸드폰 |
---|---|---|
박지성 | 영국 맨체스타 | 000-5000-0001 |
김연아 | 대한민국 서울 | 000-6000-0001 |
장미란 | 대한민국 강원도 | 000-7000-0001 |
추신수 | 미국 클리블랜드 | 000-8000-0001 |
4. 합집합
- 두 릴레이션을 합해 하나의 릴레이션 반환
- 이때 두 릴레이션은 서로 같은 속성 개수/순서와 도메인을 가져야 함
- 형식: $R \cup S$
질의 2-3
마당서점은 지점 A와 지점 B가 있다. 두 지점의 도서는 각 지점에서 관리하며 릴레이션 이름은 각각 도서A, 도서B다. 마당서점의 도서를 하나의 릴레이션으로 보이시오.
정답
도서A $\; \cup \;$ 도서B
질의 결과
5. 교집합
- 합병가능한 두 릴레이션을 대상으로 하며, 두 릴레이션이 공통으로 가지고 있는 튜플을 반환함
- 형식: $R \cap S$
질의 2-4
마당서점의 두 지점에서 동일하게 보유하고 있는 도서 목록을 보이시오.
정답
도서A $\; \cap \;$ 도서B
질의 결과
6. 차집합
- 첫 번째 릴레이션엔 속하고, 두 번째 릴레이션엔 속하지 않는 튜플을 반환함
- 형식: $R - S$
질의 2-5
마당서점 두 지점 중 지점 A에서만 보유하고 있는 도서 목록을 보이시오.
정답
도서A $\; - \;$ 도서B
질의 결과
7. 카티전 프로덕트(cartesian product)
- 두 릴레이션 연결시켜 하나로 합칠 때 사용
- 결과 릴레이션: 첫 번째 릴레이션의 오른쪽에 두 번쩨 릴레이션의 튜플을 순서대로 배열한 뒤 반환
- 결과 릴레이션의 차수: 두 릴레이션의 차수의 합
- 카디날리티: 두 릴레이션의 카디날리티의 곱
- 형식: $R \times S$
질의 2-6
고객 릴레이션과 주문 리레이션의 카티전 프로덕트를 구하시오.
정답
고객 $\times$ 주문
질의 결과
8. 조인
- 두 릴레이션의 공통 속성 기준으로 속성 값 같은 튜플을 수평으로 결합하는 연산
- 수행 조건: 두 릴레이션의 조인에 참여하는 속성은 동일한 도메인이어야 함
- 결과: 공통 속성의 속성 값이 동일한 튜플만 반환
- 형식: \(R \; {\large\bowtie}_{\small c} \; S = {\large\sigma}_{c}(R \times S)\) ($R$과 $S$는 릴레이션, $c$는 조인조건)
조인 연산은 다음과 같이 구분된다.
- 기본 연산
- 세타 조인: ${\large\bowtie}_{\small\theta}$
- 동등 조인: ${\large\bowtie}$
- 자연 조인: ${\large\bowtie}_{\small N}$
- 확장된 조인 연산
- 세미 조인: ${\large\ltimes}$, ${\large\rtimes}$
- 외부 조인: $⟕$, $⟖$, $⟗$
9. 세타조인과 동등조인
9.1. 세타 조인(theta join, $\theta$)
- 조인에 참여하는 두 릴레이션의 속성값을 비교해 조건을 만족하는 튜플만 반환함
- 세타조인의 조건은 다음 중 하나가 됨
- $\lbrace =, \ne, \ge, \le, <, > \rbrace$
- 형식: \(R \; {\large\bowtie}_{\small (r \; \mathrm{cond.} \; s)} \; S\) ($R$과 $S$는 릴레이션, $r$, $s$는 각각 $R$, $S$의 속성임)
9.2. 동등 조인(equi join)
- 세타조인에서 $=$ 연산자를 사용한 조인
- 보통 조인 연산이라고 하면 동등조인을 지칭함
- 형식: \(R \; {\large\bowtie}_{\small (r = s)} \; S\)
질의 2-7
고객과 고객의 주문 사항을 모두 보이시오.
정답
고객 \({\large\bowtie}_{\small \mathrm{고객.고객번호}=\mathrm{주문.고객번호} }\) 주문
질의 결과
10. 자연 조인(natural join)
- 동등조인에서 참여한 속성이 두 번 나오지 않게 두 번째 속성을 제거한 결과를 반환
- 자주 사용되는 조인
- 형식: \(R \; {\large\bowtie}_{\small N(r, \; s)} \; S\)
질의 2-8
고객과 고객의 주문 사항을 모두 보여주되, 같은 속성은 한 번만 표시하시오.
정답
고객 \({\large\bowtie}_{\small N(\mathrm{고객.고객번호}, \; \mathrm{주문.고객번호})}\) 주문
질의 결과
11. 외부 조인(outer join)
- 자연조인 시 조인에 실패한 튜플을 모두 보여줌
- 다만 값이 없는 대응 속성에는
NULL
값을 채워서 반환함
- 다만 값이 없는 대응 속성에는
모든 속성을 보여주는 기준 릴레이션 위치에 따라 왼쪽(left), 오른쪽(right), 완전(full, 양쪽) 외부 조인으로 나뉨
- 형식
- 왼쪽(left) 외부조인: \(R \; {\large⟕}_{\small (r, \; s)} \; S\)
- 오른쪽(right) 외부조인: \(R \; {\large⟖}_{\small (r, \; s)} \; S\)
- 완전(full) 외부조인: \(R \; {\large⟗}_{\small (r, \; s)} \; S\)
질의 2-9
마당서점의 고객과 고객의 주문 내역을 보이시오.
- 고객 기준으로 주문내역이 없는 고객도 모두 보이시오.
- 주문내역이 없는 고객과, 고객 릴레이션에 고객번호가 없는 주문을 모두 보이시오.
- 주문내역 기준으로 고객 릴레이션에 고객번호 없는 주문도 모두 보이시오.
정답
- 고객 \({\large⟕}_{\small (\mathrm{고객.고객번호}, \; \mathrm{주문.고객번호})}\) 주문
- 고객 \({\large⟗}_{\small (\mathrm{고객.고객번호}, \; \mathrm{주문.고객번호})}\) 주문
- 고객 \({\large⟖}_{\small (\mathrm{고객.고객번호}, \; \mathrm{주문.고객번호})}\) 주문
질의 결과
12. 세미 조인(semi join)
- 자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환함
- 기호에서 닫힌 쪽 릴레이션의 튜플만 반환함
- 형식
- 왼쪽 세미조인: \(R \; {\large\ltimes}_{\small (r, \; s)} \; S\)
- 오른쪽 세미조인: \(R \; {\large\rtimes}_{\small (r, \; s)} \; S\)
질의 2-10
마당서점의 고객 중 주문 내역이 있는 고객의 고객정보를 보이시오.
정답
고객 \({\large\ltimes}_{\small (\mathrm{고객.고객번호}, \; \mathrm{주문.고객번호})}\) 주문
질의 결과
13. 디비전(division)
- 다른 연산과 달리 릴레이션의 속성 값의 집합으로 연산을 수행함
- 특정 값들을 모두 가진 튜플을 찾을 때 사용함
- 실제로는 자주 사용되지는 않음
- 조인 연산을 이용해 디비전 연산을 수행할 수 있음
- 형식: $R \div S$
14. 관계대수 복합 연산 예제
14.1. $\sigma$, $\pi$, 집합 연산의 복합 사용
질의 2-11
마당서점의 도서 중 가격이 8,000원 이하인 도서 이름과 출판사를 보이시오.
- 마당서점이 하나인 경우
정답
질의 결과
- 마당서점이 둘 이상인 경우
정답
질의 결과
14.2. $\times$, 조인 연산의 복합 사용
질의 2-12
마당서점의 박지성 고객의 거래내역 중 주문번호, 이름, 가격을 보이시오.
- 조인을 사용한 연산
정답
질의 결과
- 카티전 프로덕트를 사용한 연산
정답
질의 결과