관계형 데이터베이스에서는 릴레이션에 저장된 모든 데이터를 그대로 사용하는 것이 아니라, 필요한 행과 열을 고르고 여러 릴레이션을 결합하여 질의에 맞는 새로운 릴레이션을 만듭니다. 이러한 데이터 조작의 이론적 기반이 관계 대수와 관계 해석입니다.
이 장에서는 관계 대수와 관계 해석의 차이를 먼저 구분하고, 관계 대수 연산자인 선택·추출·결합·나누기의 의미와 사용 방법을 살펴봅니다. 이어서 합집합·교집합·차집합·교차곱의 조건과 결과, 교차곱에서 차수와 카디널리티를 계산하는 방법을 정리합니다.
이 장의 핵심 내용
- 관계 대수는 릴레이션과 연산자를 이용해 원하는 결과를 만드는 연산적 방법입니다.
- 관계 해석은 결과를 구하는 절차보다 원하는 데이터의 조건을 선언하는 방법입니다.
- 튜플 관계 해석은 튜플 변수를, 도메인 관계 해석은 속성값 변수를 사용합니다.
- 선택은 조건을 만족하는 행을 고르고, 추출은 필요한 열을 선택합니다.
- 결합은 관련 속성을 기준으로 두 릴레이션의 튜플을 연결합니다.
- 나누기는 주어진 모든 조건을 만족하는 대상을 구할 때 사용합니다.
- 합집합·교집합·차집합에는 두 릴레이션의 합병 가능 조건이 필요합니다.
- 교차곱의 차수는 두 차수의 합이고, 카디널리티는 두 카디널리티의 곱입니다.
관계 대수와 관계 해석은 무엇이 다른가?
관계 대수(Relational Algebra)와 관계 해석(Relational Calculus)은 모두 관계형 데이터베이스에서 원하는 정보를 표현하는 형식 질의 언어입니다. 두 방식은 같은 종류의 질의를 표현할 수 있지만, 질의를 작성하는 관점이 다릅니다.
| 비교 항목 | 관계 대수 | 관계 해석 |
|---|---|---|
| 영문 | Relational Algebra | Relational Calculus |
| 기본 관점 | 어떤 연산을 어떤 순서로 수행할 것인가 | 어떤 조건을 만족하는 정보가 필요한가 |
| 성격 | 절차적·연산적 | 비절차적·선언적 |
| 표현 방법 | 선택·추출·결합 등의 연산자 조합 | 논리식·조건·정량자 사용 |
| 주요 활용 | 질의 처리와 실행 계획의 내부 표현 | 사용자가 원하는 결과 조건의 표현 |
관계 대수
학생 릴레이션에서 전자과 학생을 선택한 뒤 학번과 이름을 추출하는 것처럼 연산의 순서를 표현합니다.
선택 → 추출
관계 해석
전자과에 속하는 학생 가운데 학번과 이름을 결과로 반환하라는 조건을 논리식으로 표현합니다.
원하는 결과 조건 선언
관계 해석에는 어떤 종류가 있는가?
관계 해석은 변수의 대상에 따라 튜플 관계 해석과 도메인 관계 해석으로 구분합니다. 두 방식 모두 비교 연산자, 논리 연산자와 정량자를 이용하여 원하는 결과를 정의합니다.
| 구분 | 튜플 관계 해석 | 도메인 관계 해석 |
|---|---|---|
| 영문 | Tuple Relational Calculus | Domain Relational Calculus |
| 변수의 대상 | 릴레이션의 튜플 전체 | 각 속성의 도메인 값 |
| 변수 의미 | 한 행을 나타내는 튜플 변수 | 하나의 속성값을 나타내는 도메인 변수 |
| 유사한 질의 방식 | SQL과 비교하기 쉬움 | QBE와 비교하기 쉬움 |
관계 해석의 정량자
| 기호 | 명칭 | 의미 |
|---|---|---|
| ∀ | 전칭 정량자 Universal Quantifier | 모든 대상에 대하여 조건이 성립함 |
| ∃ | 존재 정량자 Existential Quantifier | 조건을 만족하는 대상이 하나 이상 존재함 |
기호 주의: ∀는 ‘모든 것에 대하여’, ∃는 ‘적어도 하나가 존재함’을 의미합니다. 두 기호의 의미를 반대로 암기하지 않도록 주의합니다.
관계 대수 연산자는 어떻게 분류하는가?
관계 대수 연산자는 순수 관계 연산자와 일반 집합 연산자로 구분하는 경우가 많습니다. 순수 관계 연산자는 릴레이션의 행·열·관계를 직접 조작하며, 일반 집합 연산자는 수학의 집합 연산을 릴레이션에 적용합니다.
| 구분 | 연산자 | 기호 | 핵심 기능 |
|---|---|---|---|
| 순수 관계 연산자 | 선택 Select | σ | 조건을 만족하는 행 선택 |
| 추출 Project | π | 필요한 열 선택 | |
| 결합 Join | ⋈ | 관련된 두 릴레이션 연결 | |
| 나누기 Division | ÷ | 모든 조건을 만족하는 값 검색 | |
| 일반 집합 연산자 | 합집합 Union | ∪ | 두 릴레이션의 튜플을 합침 |
| 교집합 Intersection | ∩ | 두 릴레이션에 공통된 튜플 검색 | |
| 차집합 Difference | − | 첫 번째 릴레이션에만 있는 튜플 검색 | |
| 교차곱 Cartesian Product | × | 두 릴레이션의 모든 튜플 조합 생성 |
이론적 분류 차이: 데이터베이스 이론에서는 선택·추출·합집합·차집합·교차곱 등을 기본 연산으로 보고, 결합·교집합·나누기를 기본 연산의 조합으로 표현 가능한 유도 연산으로 설명하기도 합니다.
선택 연산자는 행을 어떻게 고르는가?
선택(Select)은 릴레이션의 튜플 가운데 주어진 조건을 만족하는 행만 선택하는 연산입니다. 릴레이션을 수평 방향으로 일부 잘라 내는 것과 같으므로 수평적 연산이라고도 합니다.
표현: σ학과=’전자과’(학생)
다음 학생 릴레이션에서 학과가 전자과인 학생을 선택해 보겠습니다.
| 학번 | 이름 | 학과 | 졸업연도 |
|---|---|---|---|
| b101 | 박수준 | 국문과 | 2025 |
| c101 | 김희영 | 전자과 | 2026 |
| c103 | 두옥이 | 전자과 | 2027 |
| d101 | 면처리 | 영문과 | 2028 |
| 학번 | 이름 | 학과 | 졸업연도 |
|---|---|---|---|
| c101 | 김희영 | 전자과 | 2026 |
| c103 | 두옥이 | 전자과 | 2027 |
차수
열은 삭제되지 않으므로 결과 릴레이션의 차수는 원래 릴레이션과 같습니다.
카디널리티
조건에 맞지 않는 행이 제거되므로 원래 릴레이션보다 작거나 같습니다.
SQL과 혼동 주의: 관계 대수의 Select는 행을 선택합니다. SQL에서는 행 조건이 주로 WHERE 절에 해당하고, SQL의 SELECT 절은 열을 지정하므로 관계 대수의 추출과 대응되는 부분이 있습니다.
추출 연산자는 열을 어떻게 고르는가?
추출(Project 또는 Projection)은 릴레이션에서 필요한 속성만 선택하는 연산입니다. 열을 수직 방향으로 선택하므로 수직적 연산이라고도 하며, 연산 기호로 파이(π)를 사용합니다.
표현: π학번, 이름(학생)
앞의 학생 릴레이션에서 학번과 이름 속성만 추출하면 다음과 같은 결과가 만들어집니다.
| 학번 | 이름 |
|---|---|
| b101 | 박수준 |
| c101 | 김희영 |
| c103 | 두옥이 |
| d101 | 면처리 |
- 선택한 속성만 결과 릴레이션에 남습니다.
- 결과 릴레이션의 차수는 선택한 속성의 수가 됩니다.
- 고전적인 관계 대수는 집합을 기반으로 하므로 같은 결과 튜플은 중복을 제거합니다.
- 열만 줄이더라도 중복 제거에 따라 카디널리티가 감소할 수 있습니다.
결합 연산자는 두 릴레이션을 어떻게 연결하는가?
결합(Join)은 두 릴레이션에서 서로 관련된 튜플을 연결하여 하나의 새로운 릴레이션을 만드는 연산입니다. 일반적으로 공통 속성이나 지정한 결합 조건을 기준으로 튜플을 대응시킵니다.
학생 릴레이션에는 학과코드가 저장되어 있고, 학과 릴레이션에는 학과코드별 학과명과 사무실이 저장되어 있다고 가정합니다. 두 릴레이션을 학과코드로 자연 결합하면 공통 속성값이 같은 튜플끼리 연결되고, 공통 속성인 학과코드는 결과에서 한 번만 나타납니다.
학생
| 학번 | 이름 | 학과코드 |
|---|---|---|
| S001 | 김민수 | D01 |
| S002 | 이지연 | D02 |
| S003 | 박준호 | D01 |
학과
| 학과코드 | 학과명 | 사무실 |
|---|---|---|
| D01 | 전자과 | 공학관 201호 |
| D02 | 국문과 | 인문관 301호 |
| 학번 | 이름 | 학과코드 | 학과명 | 사무실 |
|---|---|---|---|---|
| S001 | 김민수 | D01 | 전자과 | 공학관 201호 |
| S002 | 이지연 | D02 | 국문과 | 인문관 301호 |
| S003 | 박준호 | D01 | 전자과 | 공학관 201호 |
| 결합 종류 | 의미 | 결과의 공통 속성 |
|---|---|---|
| 세타 결합 Theta Join | =, <, > 등의 일반 비교 조건으로 결합 | 두 릴레이션의 속성을 모두 유지 |
| 동등 결합 Equi Join | 동등 비교 조건만 사용하는 세타 결합 | 동일한 결합 속성이 두 번 남을 수 있음 |
| 자연 결합 Natural Join | 이름이 같은 공통 속성의 값이 같은 튜플을 결합 | 공통 속성을 한 번만 남김 |
주의: 단순히 두 릴레이션의 모든 튜플 조합을 만드는 것은 결합이 아니라 교차곱입니다. 결합은 교차곱 결과에 결합 조건을 적용한 연산으로 이해할 수 있습니다.
나누기 연산자는 어떤 값을 검색하는가?
나누기(Division)는 ‘주어진 모든 조건을 만족하는 대상’을 검색하는 연산입니다. 나누어지는 릴레이션을 R(X, Y), 나누는 릴레이션을 S(Y)라고 하면, R ÷ S는 S에 있는 모든 Y값과 관계를 가지는 X값을 반환합니다.
표현: 수강R(학생ID, 과목코드) ÷ 필수과목S(과목코드)
의미: 모든 필수과목을 수강한 학생ID를 검색합니다.
수강 R
| 학생ID | 과목코드 |
|---|---|
| S001 | C101 |
| S001 | C102 |
| S001 | C103 |
| S002 | C101 |
| S002 | C102 |
| S003 | C102 |
| S003 | C103 |
필수과목 S
| 과목코드 |
|---|
| C101 |
| C102 |
| 학생ID(결과) |
|---|
| S001 |
| S002 |
필수과목 C101과 C102를 모두 수강한 학생은 S001과 S002입니다. S003은 C102는 수강했지만 C101을 수강하지 않았으므로 결과에서 제외됩니다.
- 나누는 릴레이션 S의 속성은 나누어지는 릴레이션 R의 속성에 포함되어야 합니다.
- 결과에는 R에만 있고 S에는 없는 속성이 남습니다.
- ‘모든’, ‘전부’, ‘각각 모두’라는 표현이 있는 질의에서 나누기 연산을 검토합니다.
교재 표현 교정: 나누는 릴레이션(S)이 나누어지는 릴레이션(R)의 모든 속성을 포함하는 것이 아닙니다. 반대로 나누는 릴레이션(S)의 속성 집합이 나누어지는 릴레이션(R)의 속성 집합에 포함되어야 합니다.
합집합·교집합·차집합에는 어떤 조건이 필요한가?
합집합·교집합·차집합은 두 릴레이션을 집합처럼 처리하는 이항 연산입니다. 이 세 연산을 수행하려면 두 릴레이션이 합병 가능해야 합니다.
릴레이션 R
| 학생ID |
|---|
| S001 |
| S002 |
| S003 |
릴레이션 S
| 학생ID |
|---|
| S002 |
| S003 |
| S004 |
| 연산 | 기호 | 결과 | 의미 |
|---|---|---|---|
| 합집합 | R ∪ S | S001, S002, S003, S004 | R 또는 S에 포함된 모든 튜플 |
| 교집합 | R ∩ S | S002, S003 | R과 S에 공통으로 포함된 튜플 |
| 차집합 | R − S | S001 | R에는 있지만 S에는 없는 튜플 |
| 반대 방향 차집합 | S − R | S004 | S에는 있지만 R에는 없는 튜플 |
중복 처리: 고전적인 관계 대수는 릴레이션을 튜플의 집합으로 다루므로 합집합·교집합·차집합 결과에 동일한 튜플이 중복되어 나타나지 않습니다.
교차곱은 차수와 카디널리티를 어떻게 계산하는가?
교차곱(Cartesian Product)은 첫 번째 릴레이션의 각 튜플과 두 번째 릴레이션의 각 튜플을 모두 조합하여 새로운 릴레이션을 만드는 연산입니다.
릴레이션 R의 튜플 하나마다 릴레이션 S의 모든 튜플이 연결되므로 결과 튜플 수는 두 릴레이션의 카디널리티를 곱한 값입니다. 결과 속성에는 두 릴레이션의 모든 속성이 포함되므로 차수는 두 차수의 합입니다. 교차곱에서는 한쪽 릴레이션의 모든 행이 다른 쪽 릴레이션의 모든 행과 조합되기 때문에 차수는 합으로, 카디널리티는 곱으로 계산됩니다.
두 릴레이션에 같은 이름의 속성이 있으면 결과 속성을 구분하기 위해 릴레이션 이름을 함께 표시하거나 이름 변경 연산자 ρ를 사용할 수 있습니다.
릴레이션 R의 차수가 4이고 카디널리티가 5이며, 릴레이션 S의 차수가 6이고 카디널리티가 7이라고 가정합니다.
| 구분 | 릴레이션 R | 릴레이션 S | R × S의 결과 |
|---|---|---|---|
| 차수 | 4 | 6 | 4 + 6 = 10 |
| 카디널리티 | 5 | 7 | 5 × 7 = 35 |
합병 가능 조건: 교차곱은 합집합·교집합·차집합과 달리 두 릴레이션의 차수나 대응 도메인이 같을 필요가 없습니다.
연산자에 따라 차수와 카디널리티는 어떻게 달라지는가?
| 연산자 | 차수의 변화 | 카디널리티의 변화 | 핵심 기준 |
|---|---|---|---|
| 선택 σ | 입력과 같음 | 입력보다 작거나 같음 | 행 조건 |
| 추출 π | 선택한 속성 수로 감소 가능 | 중복 제거로 감소 가능 | 열 목록 |
| 결합 ⋈ | 결합 종류와 공통 속성에 따라 결정 | 결합 조건에 따라 달라짐 | 관련 속성 또는 조건 |
| 나누기 ÷ | 나누어지는 릴레이션에서 나누는 릴레이션의 속성을 제외 | 모든 조건을 만족한 튜플 수 | 전칭 조건 |
| 합집합 ∪ | 입력과 같음 | 중복을 제외한 두 집합의 합 | 합병 가능 |
| 교집합 ∩ | 입력과 같음 | 공통 튜플 수 | 합병 가능 |
| 차집합 − | 입력과 같음 | 첫 번째 릴레이션에만 있는 튜플 수 | 합병 가능·방향 중요 |
| 교차곱 × | 두 차수의 합 | 두 카디널리티의 곱 | 모든 튜플 조합 |
시험에서 자주 혼동되는 개념
선택과 추출
선택은 조건에 맞는 행을 고르고 σ를 사용합니다. 추출은 필요한 열을 고르고 π를 사용합니다.
결합과 교차곱
결합은 관련된 튜플만 조건에 따라 연결하지만, 교차곱은 두 릴레이션의 모든 튜플 조합을 만듭니다.
합집합과 결합
합집합은 같은 구조의 튜플을 세로로 합치고, 결합은 관련 속성을 기준으로 열을 확장하여 연결합니다.
교집합과 차집합
교집합은 양쪽에 공통된 튜플을 반환하고, 차집합은 앞의 릴레이션에만 있는 튜플을 반환하므로 순서가 중요합니다.
관계 대수와 관계 해석
관계 대수는 수행할 연산을 표현하고, 관계 해석은 결과가 만족해야 하는 조건을 표현합니다.
나누기와 전칭 조건
나누기는 하나의 조건만 만족하는 값을 찾는 것이 아니라 주어진 조건을 모두 만족하는 값을 찾습니다.
이번 장 핵심 요약
- 관계 대수는 릴레이션에 수행할 연산과 순서를 표현하는 절차적·연산적 방법입니다.
- 관계 해석은 원하는 정보가 만족해야 할 조건을 정의하는 비절차적·선언적 방법입니다.
- 튜플 관계 해석은 튜플 변수를, 도메인 관계 해석은 속성값 변수를 사용합니다.
- ∀는 모든 대상에 대하여, ∃는 하나 이상의 대상이 존재함을 의미합니다.
- 선택은 σ를 사용하여 조건을 만족하는 행을 선택합니다.
- 추출은 π를 사용하여 필요한 열을 선택합니다.
- 자연 결합은 공통 속성값이 같은 튜플을 연결하고 공통 속성을 한 번만 남깁니다.
- 나누기는 나누는 릴레이션의 모든 튜플과 관계를 가지는 값을 구합니다.
- 합집합·교집합·차집합에는 합병 가능 조건이 필요합니다.
- 차집합은 연산 순서에 따라 결과가 달라집니다.
- 교차곱은 두 릴레이션의 모든 튜플 조합을 생성합니다.
- 교차곱의 차수는 두 차수의 합이고 카디널리티는 두 카디널리티의 곱입니다.
복습 문제
원하는 결과를 구하기 위해 수행할 연산과 순서를 표현하는 방법은?
관계 대수입니다.
원하는 정보가 만족해야 할 조건만 정의하는 비절차적 방법은?
관계 해석입니다.
릴레이션에서 조건을 만족하는 행을 선택하는 연산자는?
선택 연산자이며 기호는 σ입니다.
릴레이션에서 필요한 열을 선택하는 연산자는?
추출 연산자이며 기호는 π입니다.
두 릴레이션의 관련된 튜플을 공통 속성이나 조건으로 연결하는 연산자는?
결합 연산자이며 기호는 ⋈입니다.
주어진 모든 조건을 만족하는 대상을 구할 때 사용하는 연산자는?
나누기 연산자이며 기호는 ÷입니다.
합집합·교집합·차집합을 수행하기 위한 공통 조건은?
두 릴레이션의 차수가 같고 대응하는 속성의 도메인이 호환되는 합병 가능 조건을 만족해야 합니다.
두 릴레이션의 모든 튜플 조합을 만드는 연산자는?
교차곱입니다.
차수가 4와 6인 두 릴레이션을 교차곱하면 결과 차수는?
4+6이므로 10입니다.
카디널리티가 5와 7인 두 릴레이션을 교차곱하면 결과 카디널리티는?
5×7이므로 35입니다.
R − S와 S − R의 결과는 항상 같은가?
같지 않습니다. 차집합은 첫 번째 릴레이션을 기준으로 하므로 연산 순서에 따라 결과가 달라집니다.
‘모든 필수과목을 수강한 학생’을 찾는 데 적합한 관계 연산자는?
나누기 연산자입니다.
참고자료
- 학습 범위 — 사무자동화산업기사 제1과목 사무자동화 시스템, 관계 대수·관계 해석·관계 연산자
- Q-Net — 사무자동화산업기사 종목별 상세정보 및 출제기준
- Carnegie Mellon University — Relational Query Languages
- Stanford University — Relational Algebra
- UC Berkeley — Relational Calculus
- Oracle Database — UNION, INTERSECT, MINUS Operators
이 글은 사무자동화산업기사 시험 범위에 포함된 관계 대수와 관계 해석, 선택·추출·결합·나누기와 일반 집합 연산자를 이해하고 복습할 수 있도록 재구성한 정리입니다. 관계 대수 연산자의 기본·유도 분류와 일부 기호는 교재에 따라 다르게 표현될 수 있으므로 실제 시험에서는 문제에서 제시한 정의와 최신 Q-Net 출제기준을 함께 확인해야 합니다.