💡 핵심 인사이트
관계 대수의 프로젝트(Project, $\pi$) 연산은 릴레이션에서 원하는 속성(열, Column)들만 골라내어 새로운 릴레이션을 만드는 '수직적 부분집합' 연산입니다.
SELECT(선택)가 특정 조건을 만족하는 '행(튜플)'을 걸러낸다면, PROJECT는 필요한 '열(속성)'만 남기고 나머지를 버립니다.
Ⅰ. 프로젝트(Project) 연산의 개념
프로젝트 연산은 주어진 릴레이션에서 주어진 속성 리스트에 해당하는 열들만 추출합니다. 수학적인 기호로는 그리스 문자 파이($\pi$)를 사용합니다.
- 표기법: $\pi_{속성리스트}(릴레이션)$
- SQL 매핑:
SELECT 속성1, 속성2 FROM 테이블명;(관계 대수의 Project가 SQL의 SELECT 절에 해당한다는 점에 유의하세요. 관계 대수의 SELECT($\sigma$)는 SQL의 WHERE 절입니다.)
Ⅱ. 프로젝트 연산의 특징과 동작 원리
1. 중복 튜플의 제거 (중요)
릴레이션의 특성상 하나의 릴레이션 안에는 동일한 튜플(행)이 중복해서 존재할 수 없습니다(튜플의 유일성). 따라서 특정 속성만 추출했을 때 만약 결과값에 중복된 행이 발생한다면, 프로젝트 연산은 자동으로 중복을 제거하고 하나만 남깁니다.
[ 학생 릴레이션 ]
학번 | 이름 | 학과
------|--------|------
1001 | 김철수 | 컴공
1002 | 이영희 | 경영
1003 | 박민수 | 컴공
▶ π_{학과}(학생) (학생 릴레이션에서 학과만 추출)
[ 결과 릴레이션 ]
학과
------
컴공
경영
*(컴공이 2명이라도 결과에서는 중복이 제거되어 1개만 나옴)*
2. 차수(Degree)의 감소
결과 릴레이션의 차수(속성의 개수)는 연산에 지정된 속성 리스트의 개수와 같습니다. 원본 릴레이션의 차수보다 항상 작거나 같습니다. (수직적으로 잘라내므로 폭이 줄어듭니다.)
Ⅲ. 복합 연산 예시 (SELECT와 PROJECT의 결합)
관계 대수는 수식처럼 연산을 중첩하여 사용할 수 있습니다.
- 요구사항: "컴퓨터공학과 학생들의 '이름'만 검색하라."
- 관계 대수식: $\pi_{이름}(\sigma_{학과='컴공'}(학생))$
- 먼저 괄호 안의 $\sigma$(Select) 연산이 실행되어 학과가 '컴공'인 튜플(행) 2개를 수평적으로 뽑아냅니다.
- 그다음 바깥쪽의 $\pi$(Project) 연산이 실행되어 그 2개의 행 중에서 '이름' 열(수직)만 추출합니다.
📢 섹션 요약 비유: 프로젝트($\pi$) 연산은 두꺼운 전화번호부 책에서 이름과 전화번호 열만 보이도록 나머지 주소, 직업 열을 형광펜으로 지워버리는 작업과 같습니다.