관계 데이터 연산

1. 관계 대수의 개념

가. 절차 언어(procedural language)

원하는 결과를 얻기 위해 릴레이션의 처리 과정을 순서대로 기술하는 언어

나. 릴레이션을 처리하는 연산자들의 모임

대표 연산자 8개
일반 집합 연산자와 순수 관계 연산자로 분류

다. 폐쇄 특성(closure property)

피연산자도 릴레이션이고 연산의 결과도 릴레이션
※ 질의(query): 데이터에 대한 처리 요구

2. 관계 대수 연산자

가. 일반 집합 연산자

2개의 릴레이션을 대상으로 연산을 수행
합집합, 교집합, 차집합 연산자는 두 릴레이션을 합병 가능해야 함
(서로 대응되는 속성의 도메인이 같고 차수가 같아야함)

나. 순수 관계 연산자

1.
SELECT (σ) 연산
릴레이션에서 조건을 만족하는 튜플 선택
수평적 부분집합을 결과로 생성
2.
PROJECT (π) 연산
릴레이션에서 지정된 속성만을 추출
수직적 부분집합을 결과로 생성
3.
JOIN (⋈) 연산
두 릴레이션의 공통 속성을 기준으로 튜플들을 결합
주요 조인 유형:
내부 조인 (Inner Join)
자연 조인 (Natural Join)
외부 조인 (Outer Join): 왼쪽, 오른쪽, 완전 외부 조인
4.
DIVISION (÷) 연산
한 릴레이션을 다른 릴레이션으로 나누는 연산
첫 번째 릴레이션이 두 번째 릴레이션의 모든 속성을 포함해야 함

3. 관계 대수 연산 예제

가. 조인 연산 예제

각 릴레이션 테이블

R S
A
B
a1
b1
a3
b2
a5
b5
B
C
b2
c2
b2
c3
b3
c4
b5
c5

1. 동등조인 (Equi Join)

기호: R ⋈[조건] S
두 릴레이션의 속성 값이 같은 튜플들을 연결
A B C
a3 b2 c2
a3 b2 c3
a5 b5 c5

2. 자연조인 (Natural Join)

기호: R ⋈ S
공통 속성을 기준으로 같은 값을 가진 튜플들을 연결하고 중복 속성 제거
A B C
a3 b2 c2
a3 b2 c3
a5 b5 c5

3. 세미조인 (Semi Join)

기호: R ⋉ S 또는 R ⋊ S
한쪽 릴레이션의 속성만 선택하여 조인 수행
A B
a3 b2
a5 b5

4. 외부조인 (Outer Join)

• 왼쪽 외부조인 (Left Outer Join): R ⟕ S
A B C
a1 b1 NULL
a3 b2 c2
a3 b2 c3
a5 b5 c5
• 오른쪽 외부조인 (Right Outer Join): R ⟖ S
A B C
a3 b2 c2
a3 b2 c3
a5 b5 c5
NULL b1 NULL
NULL b3 c4
• 완전 외부조인 (Full Outer Join): R ⟗ S
A B C
a3 b2 c2
a3 b2 c3
a5 b5 c5
a1 b1 NULL
NULL b3 c4

나. 관계 대수식 표현

1.
업체 이름 검색:
π[업체이름](업체)
SQL
복사
2.
제품의 무게와 색깔 검색:
π[무게,색깔](제품)
SQL
복사
3.
색깔이 red인 제품 검색:
σ[색깔='red'](제품)
SQL
복사
4.
색깔이 red인 제품 이름 검색:
π[제품이름](σ[색깔='red'](제품))
SQL
복사
5.
색깔이 blue인 제품 번호 검색:
π[제품번호](σ[색깔='blue'](제품))
SQL
복사
6.
제품번호 123인 제품을 발송한 업체 이름 검색:
π[업체이름](업체 ⋈ σ[제품번호=123](발송))
SQL
복사

도서 예약 시스템 관계 대수식

1.
소설 장르 도서 예약 고객 번호 검색:
π[고객번호](예약 ⋈ σ[장르='소설'](도서))
SQL
복사
2.
예약번호 114인 고객 정보 검색:
π[고객이름,예약날짜](고객 ⋈ σ[예약번호=114](예약))
SQL
복사
3.
도서번호 C123 예약 고객 정보 검색:
π[고객번호,전화번호](고객 ⋈ σ[도서번호='C123'](예약))
SQL
복사
4.
특정 날짜의 DB개론 예약 고객 정보 검색:
π[고객이름,전화번호](고객 ⋈ (예약 ⋈ σ[제목='DB개론' ∧ 예약날짜='2024-10-28'](도서)))
SQL
복사

4. 관계 대수 연산 연습 문제

가. 분할 연산 (Division)

릴레이션 R, S, T:
R:
A
B
a1
b1
a1
b2
a2
b2
a2
b3
S:
B
b1
b2
T:
B
b2
b3
1.
R÷S 연산 결과:
A
a1
2.
R÷T 연산 결과:
A
a2

나. 카티션 프로덕트 연산

입력 릴레이션:
R:
A
B
a1
b1
a2
b2
a3
b3
S:
B
C
b1
c1
b3
c2
b4
c3
카티션 프로덕트 (R × S) 결과:
A
B
B
C
a1
b1
b1
c1
a1
b1
b3
c2
a1
b1
b4
c3
a2
b2
b1
c1
a2
b2
b3
c2
a2
b2
b4
c3
a3
b3
b1
c1
a3
b3
b3
c2
a3
b3
b4
c3

다. 조인 연산 예제

입력 릴레이션:
고객:
고객아이디
고객이름
나이
등급
apple
김현준
20
gold
banana
정소화
25
vip
carrot
원유선
28
gold
orange
정지영
22
silver
grape
김원효
31
vip
주문:
주문번호
주문고객
주문제품
주문수량
1001
apple
진짜우동
10
1002
carrot
맛있는파이
5
1003
banana
그대로만두
11
1004
grape
진짜우동
12
예제 질의에 대한 관계 대수식:
1.
진짜우동 주문 검색:
σ[주문제품='진짜우동'](주문)
SQL
복사
1.
25세 이하 고객 검색:
σ[나이≤25](고객)
SQL
복사
1.
맛있는파이 주문수량 검색:
π[주문수량](σ[주문제품='맛있는파이'](주문))
SQL
복사
1.
gold 등급이면서 25세 이상인 고객:
π[고객이름,나이](σ[등급='gold' ∧ 나이≥25](고객))
SQL
복사
1.
원유선 고객의 주문 정보:
π[등급,주문제품,주문수량](σ[고객이름='원유선'](고객 ⋈ 주문))
SQL
복사
1.
주문수량 10개 이상 주문:
σ[주문수량≥10](주문)
SQL
복사