관계대수 완전 정리

반응형
SMALL

📁 데이터 입출력 구현 ⑥ – 관계대수 완전 정리 (기본 연산 + 집합 연산 + 예시)

SQL을 배울 때 가장 헷갈리는 것 중 하나는 왜 이렇게 쓰는가?입니다.
그 근본 개념이 바로 관계대수(Relational Algebra)입니다.

관계대수는 관계형 데이터베이스의 수학적 기반 이론으로,
우리가 사용하는 SQL의 설계 논리를 이해하는 데 핵심적인 역할을 합니다.

이번 포스트에서는
✅ 순수 관계 연산자
✅ 집합 연산자
를 정의와 예시 중심으로 한눈에 정리해드립니다.


1. 관계대수란?

관계형 데이터베이스에서 데이터를 조회, 조작하기 위해 사용하는 절차적 질의 언어
“어떤 순서로 데이터를 어떻게 가져올지”를 명시함

2. 순수 관계 연산자 (Basic Operators)

연산 기호 설명
SELECT σ 조건을 만족하는 튜플(행) 추출 → 수평 연산
PROJECT π 특정 속성(열)만 추출 → 수직 연산
RENAME ρ 릴레이션 이름 또는 속성명을 변경
JOIN 공통 속성을 기준으로 두 릴레이션을 연결
DIVISION ÷ 모든 조건을 만족하는 튜플만 추출

🧪 SELECT (σ)

정의: 조건을 만족하는 튜플(행)만 추출하는 연산
예시: 이름이 '홍길동'인 고객 조회

σ name = '홍길동' (Customer)

🧪 PROJECT (π)

정의: 특정 속성(열)만 추출하여 새로운 릴레이션 생성
예시: 도서 테이블에서 제목만 출력

π title (Book)

🧪 JOIN (⨝)

정의: 공통 속성을 기준으로 두 릴레이션을 결합
예시: 고객과 주문을 customer_id 기준으로 연결

Customer ⨝ Customer.customer_id = Order.customer_id Order

🧪 DIVISION (÷)

정의: 특정 조건을 모두 만족하는 튜플만 추출하는 연산
예시: 모든 과목(DB, OS)을 수강한 학생 찾기

Student_Subject ÷ Subject

결과: Alice, Charlie (두 과목 모두 수강한 학생)


3. 집합 연산자 (Set Operations)

연산 기호 설명
합집합 R 또는 S에 존재하는 모든 튜플 (중복 제거)
교집합 R과 S 모두에 존재하는 튜플
차집합 R에는 있고, S에는 없는 튜플
교차곱 × 모든 가능한 튜플 조합 (JOIN의 기반)

✅ 예시 릴레이션

R
id name
1 철수
2 영희
3 민수
S
id name
2 영희
3 민수
4 수지

📌 3.1 합집합 (R ∪ S)

1 철수
2 영희
3 민수
4 수지

📌 3.2 교집합 (R ∩ S)

2 영희
3 민수

📌 3.3 차집합 (R − S)

1 철수

📌 3.4 교차곱 (R × S)

결과: R 튜플 수 × S 튜플 수 = 3 × 3 = 9개 튜플
디그리: R의 열 수 + S의 열 수

R.id R.name S.id S.name
1 철수 2 영희
1 철수 3 민수
1 철수 4 수지
2 영희 2 영희
2 영희 3 민수
2 영희 4 수지
3 민수 2 영희
3 민수 3 민수
3 민수 4 수지

4. 관계대수와 SQL 비교표

관계대수 연산 SQL 구문 대응
SELECT (σ) WHERE
PROJECT (π) SELECT
JOIN (⨝) JOIN ON
UNION (∪) UNION
INTERSECT (∩) INTERSECT
DIFFERENCE (−) EXCEPT / MINUS
DIVISION (÷) GROUP BY + HAVING 등으로 표현

✅ 마무리 요약

  • SELECT(σ): 조건으로 행 추출
  • PROJECT(π): 열만 추출
  • JOIN(⨝): 공통 속성으로 결합
  • DIVISION(÷): 모든 조건을 만족하는 대상 추출
  • 집합 연산자(∪, ∩, −, ×): 튜플 간 집합 연산

→ 관계대수는 SQL의 이론적 기초이며, 쿼리 설계와 최적화의 핵심입니다.

반응형
LIST