관계 대수(Relational Algebra)는 절차적 질의 언어(procedural query language)로, 하나 이상의 릴레이션(관계)에 대해 연산을 수행한 결과를 단일 테이블/릴레이션 형태로 반환하는 데 사용됩니다. 이 글에서는 관계 대수의 기본 연산자들을 예제와 함께 자세히 살펴보겠습니다.
설명을 위해 다음 세 개의 릴레이션(테이블)을 사용합니다.
테이블 1: course (과목)
| Course_id | Name |
|---|---|
| 1 | Computer science |
| 2 | Information Technology |
| 3 | mechanical |
테이블 2: students (학생)
| Roll No. | Name | address | age |
|---|---|---|---|
| 1 | Ram | Delhi | 18 |
| 2 | Raju | hyderabad | 20 |
| 4 | Faiz | Delhi | 22 |
| 5 | Salman | hyderabad | 20 |
테이블 3: Hostel (기숙사)
| St. No. | Name | address | age |
|---|---|---|---|
| 1 | Ram | Delhi | 18 |
| 2 | Akash | hyderabad | 20 |
| 3 | neha | Jhansi | 21 |
이제 이 릴레이션들에 대해 각종 연산을 수행하여 새로운 릴레이션을 만드는 방법을 하나씩 알아보겠습니다.
선택 연산(Selection, σ) − 선택 연산자는 그리스 문자 σ(시그마)로 표현하며, 주어진 조건을 만족하는 튜플만 릴레이션에서 골라내는 데 사용됩니다. 즉, 조건에 해당하는 튜플만 결과에 포함됩니다.
문법
σ(조건)(릴레이션_이름)
예제
course_id가 1인 학생 선택
σ(course_id = 1)(student)
결과
| Roll No. | Name | address | age |
|---|---|---|---|
| 4 | Faiz | Delhi | 22 |
추출 연산(Projection, π) − 추출 연산자는 π(파이)로 표현하며, 특정 릴레이션에서 원하는 열(컬럼)만 선택할 때 사용됩니다. 지정한 컬럼만 결과에 나타나며, 나머지 컬럼은 제외됩니다.
문법
π(column1, column2, …, columnn)(릴레이션_이름)
예제
기숙사에 있는 모든 학생의 번호와 이름 선택
π(st.no., name)(hostel)
결과
| St. No. | Name |
|---|---|
| 1 | Ram |
| 2 | Akash |
| 3 | neha |
추출 연산의 결과 행은 항상 중복이 제거됩니다. 예를 들어 같은 이름을 가진 학생이 둘 이상 있다면 중복된 행은 하나만 남습니다.
교차곱(Cross Product, X) − 교차곱은 X 기호로 표현하며, 두 릴레이션을 결합(join)한 결과를 구할 때 사용됩니다. 교차곱에서는 첫 번째 릴레이션의 각 튜플이 두 번째 릴레이션의 모든 튜플과 짝을 이룹니다. 따라서 결과 릴레이션의 크기는 n×m이 되며, 여기서 n은 첫 번째 릴레이션의 튜플 수, m은 두 번째 릴레이션의 튜플 수입니다.
문법
relation1 X relation2
예제
course 테이블과 hostel 테이블의 교차곱을 구해 보겠습니다.
student X course
| St. No. | Name | address | age | Course_id | Name |
|---|---|---|---|---|---|
| 1 | Ram | Delhi | 18 | 1 | Computer science |
| 1 | Ram | Delhi | 18 | 2 | Information Technology |
| 1 | Ram | Delhi | 18 | 3 | mechanical |
| 2 | Akash | hyderabad | 20 | 1 | Computer science |
| 2 | Akash | hyderabad | 20 | 2 | Information Technology |
| 2 | Akash | hyderabad | 20 | 3 | mechanical |
| 3 | neha | Jhansi | 21 | 1 | Computer science |
| 3 | neha | Jhansi | 21 | 2 | Information Technology |
| 3 | neha | Jhansi | 21 | 3 | mechanical |
합집합(Union, U) − 두 릴레이션 relation1과 relation2의 합집합은 relation1 또는 relation2에 속하는 모든 튜플을 포함하며, 양쪽 릴레이션에 모두 존재하는 튜플은 한 번만 나타납니다.
또한 합집합을 구하려면 두 릴레이션이 동일한 도메인(속성 구조)을 가져야 하며, 이를 합병 호환(union compatible)이라고 합니다.
문법
relation1 U relation2
예제
student와 hostel의 합집합을 구해 보겠습니다.
student U hostel
| Roll No. | Name | address | age |
|---|---|---|---|
| 1 | Ram | Delhi | 18 |
| 2 | Raju | hyderabad | 20 |
| 4 | Faiz | Delhi | 22 |
| 5 | Salman | hyderabad | 20 |
| 2 | Akash | hyderabad | 20 |
| 3 | neha | Jhansi | 21 |
차집합(Minus, -) 연산자 − 차집합은 - 기호로 표현합니다. relation1 - relation2의 결과는 relation1에는 있지만 relation2에는 없는 튜플들로 구성된 릴레이션입니다. 차집합 연산 역시 두 릴레이션이 합병 호환되어야 합니다.
문법
relation1 - relation2
예제
student - hostel 연산을 수행해 보겠습니다.
student - hostel
| Roll No. | Name | address | age |
|---|---|---|---|
| 2 | Raju | hyderabad | 20 |
| 4 | Faiz | Delhi | 22 |
| 5 | Salman | hyderabad | 20 |
이름 변경(Rename, ρ) − 이름 변경 연산은 ρ(로)로 표현하며, 주어진 릴레이션을 새로운 이름으로 바꿀 때 사용됩니다. 복잡한 질의에서 중간 결과 릴레이션에 의미 있는 이름을 부여할 때 유용합니다.
문법
ρ(new_name, old_name)
마무리
지금까지 관계 대수의 여섯 가지 기본 연산자인 선택(σ), 추출(π), 교차곱(X), 합집합(U), 차집합(-), 이름 변경(ρ)을 살펴보았습니다. 이 연산들은 SQL의 WHERE, SELECT, JOIN, UNION, MINUS(EXCEPT), AS 등의 기능과 밀접하게 연관되어 있으며, 관계형 데이터베이스 질의 처리의 이론적 기반이 됩니다. 각 연산자의 동작 원리를 확실히 이해해 두면 실제 SQL 작성 능력 향상에도 큰 도움이 됩니다.