관계대수
목차 20
24강이 릴레이션의 정적 구조(키 5종·무결성 3종)를 봤다면, 25강은 그 릴레이션을 실제로 주무르는 8개 연산자다. 관계대수란 무엇이고(절차적·폐쇄 성질) → 순수 관계 연산자 4종(σ·π·⋈·÷) → 일반 집합 연산자 4종(∪·∩·−·×) → 이 연산들이 SQL의 WHERE·SELECT·JOIN으로 어떻게 이어지는가를 관통한다. 점수밭은 순수 vs 집합 분류·σ vs π·자연조인 차수·÷('모든')·× vs ⋈ — 거의 매회 1~2문항 나오는 단원이다.
핵심 암기: 순수 관계 연산자 4종 SPJD = 셀프조디(셀렉트 σ·프로젝트 π·조인 ⋈·디비전 ÷) · σ=행(수평)/π=열(수직) · 자연조인 차수 = R + S − 공통 속성 수 · ÷ = "모든" · 카티션 곱(×)은 SPJD ❌(일반 집합 연산자)
관계대수 개요
관계대수란? — 절차적 언어 + 폐쇄 성질 ·관계대수 개요·
[정의] 관계대수(Relational Algebra) = 릴레이션을 입력으로 받아 새로운 릴레이션을 출력하는 연산의 집합. 1970년 E.F. 코드(E.F. Codd) 가 관계 데이터 모델과 함께 정립했다(24강 관계 모델 제안자와 동일 인물).
[표] 관계대수 3대 특성.
| 특성 | 의미 |
|---|---|
| 절차적(Procedural) | '어떻게(How) 가져올지'를 단계별로 명시 |
| 입력·출력 모두 릴레이션 | 연산 결과가 또 다른 릴레이션 |
| 폐쇄 성질(Closure Property) | 결과가 릴레이션이라 연산을 중첩 가능 (예: π(σ(R))) |
🔑 암기 관계대수 = 절차적(How) · 입출력 릴레이션 · 폐쇄 성질(중첩 가능). 제안자 = E.F. 코드(1970), 관계 모델과 같은 사람. ⚠️ 함정 '관계대수 = 비절차적' ❌(→ 절차적 How) / '결과는 릴레이션이 아니다' ❌(→ 입출력 모두 릴레이션·폐쇄 성질의 근거) / '관계대수 제안자 = 다른 사람' ❌(→ E.F. 코드, 24강 관계 모델과 동일). 🎯 빈출 절차적 여부·폐쇄 성질·제안자. 간헐(개념 단독). 💡 보충 폐쇄 성질이 있어 σ로 거른 결과를 다시 π로 자르는 식의 중첩이 가능하다. 오늘 우리가 쓰는 모든 SQL의 수학 뼈대가 이 관계대수다.
관계대수 vs 관계해석 — How vs What ·관계해석·
[정의] 관계해석(Relational Calculus) = 관계대수의 쌍둥이 형제. 같은 결과를 내지만 사고방식이 정반대다 — '무엇(What)'을 원하는지 논리식으로 명시하는 비절차적 언어.
[표] 관계대수 vs 관계해석.
| 구분 | 관계대수 | 관계해석 |
|---|---|---|
| 언어 유형 | 절차적(How) | 비절차적(What) |
| 표현 방식 | 연산자 기호(σ·π·⋈·÷) | 논리식(∀·∃·predicate) |
| 종류 | 1종 | 2종(튜플 관계해석·도메인 관계해석) |
| 표현력 | 동등(코드 정리) | 동등 |
🔑 암기 관계대수 = 절차적·1종 / 관계해석 = 비절차적·2종(튜플·도메인). 표현력은 둘이 동등. ⚠️ 함정 '관계해석 = 절차적' ❌(→ 비절차적) / '관계해석은 1종' ❌(→ 2종·튜플/도메인) / '관계대수가 관계해석보다 표현력이 강하다' ❌(→ 동등). 🎯 빈출 절차적/비절차적 분별·관계해석 2종·표현력 동등. 보통. 💡 보충 관계대수가 '재료를 씻고 썰고 볶아라'(과정 지시)라면, 관계해석은 '매콤한 파스타 한 접시'(결과만 주문)다. 둘은 표현력이 같다.
순수 관계 연산자 4종 — SPJD 셀프조디
★ SPJD 셀프조디 ★ — 순수 관계 연산자 4종 ·순수 4종·1순위·
[정의] 순수 관계 연산자(Pure Relational Operator) = 관계 데이터 모델 전용 4종 연산자. 두문자 SPJD = 셀프조디로 묶는다.
[표] 셀프조디 4종.
| 두음 | 연산자 | 기호 | 한 줄 |
|---|---|---|---|
| 셀 | Select | σ(시그마) | 행(수평) 선택 |
| 프 | Project | π(파이) | 열(수직) 선택 |
| 조 | Join | ⋈(보타이) | 두 릴레이션 결합 |
| 디 | Division | ÷(나누기) | '모든' 조건 만족 |
🔑 암기 SPJD = 셀프조디 — 셀렉트·프로젝트·조인·디비전. '셀프(self)로 조던 디비전을 평정한다' 그림으로 네 글자를 한 번에 외운다. ⚠️ 함정 카티션 곱(×)·합집합(∪)·교집합(∩)·차집합(−)은 순수 관계 연산자 ❌(→ 일반 집합 연산자 4종). '순수 관계 연산자가 아닌 것은?' → 셀·프·조·디 4글자에 없는 단어가 정답. 🎯 빈출 순수 vs 집합 분류(소거형). 거의 매회 1순위. 💡 보충 셀·프·조·디 네 글자만 흔들리지 않으면 25강 분류 함정은 끝난다. 보기에 ×가 끼면 그게 정답인 패턴이 단골.
① Select(σ) — 행(수평) 부분집합 ·Select·1순위·
[정의] Select(σ, 시그마) = 릴레이션에서 조건을 만족하는 튜플(행)만 골라내는 연산. 표기 σ_{조건}(릴레이션).
[표] 적용 예제 — 원본 student(카디 5 · 디그리 4).
| 학번 | 이름 | 학년 | 학과 |
|---|---|---|---|
| 2024001 | 김철수 | 2 | 컴퓨터 |
| 2024002 | 이영희 | 3 | 경영 |
| 2024003 | 박민수 | 1 | 컴퓨터 |
| 2024004 | 최지원 | 4 | 디자인 |
| 2024005 | 정우성 | 2 | 컴퓨터 |
σ_{학과='컴퓨터'}(student) 결과 (카디 3 · 디그리 4) — 행만 5→3으로 줄고, 열 수는 그대로.
| 학번 | 이름 | 학년 | 학과 |
|---|---|---|---|
| 2024001 | 김철수 | 2 | 컴퓨터 |
| 2024003 | 박민수 | 1 | 컴퓨터 |
| 2024005 | 정우성 | 2 | 컴퓨터 |
🔑 암기 σ = 행 = 수평 = 차수 동일 · 카디 감소 = WHERE. 다섯 단어를 묶어서 외운다. ⚠️ 함정 'σ는 열을 추출' ❌(→ 행) / 'σ는 차수가 변한다' ❌(→ 차수 동일, 행만 자름) / 'σ → SELECT' ❌(→ WHERE). 🎯 빈출 σ=행·차수 동일. 거의 매회(σ vs π 분별). 💡 보충 체로 거르기 — 행을 위에서 아래로 흘려보내며 조건 맞는 행만 받아낸다. 체의 칸(열·차수)은 그대로다.
② Project(π) — 열(수직) 부분집합 ·Project·1순위·
[정의] Project(π, 파이) = 지정한 속성(열)만 뽑아내는 연산. σ가 가로로 행을 잘랐다면, π는 세로로 열을 자른다. 표기 π_{속성리스트}(릴레이션).
[표] 적용 예제 — 같은 student.
π_{이름, 학과}(student) (카디 5 · 디그리 2) — 열만 4→2.
| 이름 | 학과 |
|---|---|
| 김철수 | 컴퓨터 |
| 이영희 | 경영 |
| 박민수 | 컴퓨터 |
| 최지원 | 디자인 |
| 정우성 | 컴퓨터 |
π_{학과}(student) (카디 3 · 디그리 1) — 컴퓨터 3명이 1행으로 자동 병합(중복 제거).
| 학과 |
|---|
| 컴퓨터 |
| 경영 |
| 디자인 |
🔑 암기 π = 열 = 수직 = 차수 감소 · 중복 자동 제거 = SELECT(정확히는 SELECT DISTINCT).
⚠️ 함정 'π는 행을 추출' ❌(→ 열) / 'π는 중복을 남긴다' ❌(→ 자동 제거·결과가 릴레이션이라 집합처럼 동작) / 'π → WHERE' ❌(→ SELECT 컬럼).
🎯 빈출 π=열·중복 제거. 거의 매회.
💡 보충 π_{학과}는 컴퓨터학과 3명이 1행으로 합쳐진다 — 그래서 π는 카디널리티도 줄 수 있다(중복 제거의 결과).
σ vs π 분별 — 1순위 함정 ·σ vs π·1순위·
[정의] σ와 π는 폐쇄 성질로 중첩해 자주 함께 쓴다. 예: π_{이름}(σ_{학과='컴퓨터'}(student)) = '컴퓨터학과 학생의 이름만'. 처리 순서는 안쪽부터 — 먼저 σ로 행을 거르고(컴퓨터 3명), 그다음 π로 이름 열만 뽑는다.
σ (Select) ── 행을 가로(─)로 자른다 → 차수 그대로 · 카디 감소
π (Project) ── 열을 세로(│)로 자른다 → 차수 감소 · 중복 제거
[표] σ vs π 한눈에.
| 구분 | σ (Select) | π (Project) |
|---|---|---|
| 방향 | 행(수평) | 열(수직) |
| 차수(Degree) | 동일 | 감소 |
| 중복 | 그대로 | 자동 제거 |
| SQL | WHERE | SELECT 컬럼 |
🔑 암기 σ=행=수평=WHERE(차수 동일) / π=열=수직=SELECT(차수 감소·중복 제거). 이 두 줄이면 σ·π 함정의 만능 통과 카드.
⚠️ 함정 σ/π를 뒤바꾼 보기('σ는 열', 'π는 행', 'σ는 차수 변함', 'π는 WHERE')는 전부 ❌.
🎯 빈출 σ↔π 바꿔치기. 거의 매회 1순위.
💡 보충 중첩 처리 순서는 항상 안쪽 연산 먼저 — π(σ(R))이면 σ가 먼저 돈다.
조인과 디비전
③ Join(⋈) — 두 릴레이션 결합 + 자연조인 차수 ·Join·1순위·
[정의] Join(⋈, 보타이) = 두 릴레이션을 공통 속성 기준으로 묶는 연산. 표기 R ⋈ S(자연조인) · R ⋈_{조건} S(세타조인). 입력 2개 → 출력 1개.
[표] 자연조인 예제 — student ⋈ enrollment(공통 속성 '학번'). 조인 결과 표를 작게 보려고 학생 3명(2024001~003)으로 추렸다.
student(카디 3 · 디그리 4):
| 학번 | 이름 | 학년 | 학과 |
|---|---|---|---|
| 2024001 | 김철수 | 2 | 컴퓨터 |
| 2024002 | 이영희 | 3 | 경영 |
| 2024003 | 박민수 | 1 | 컴퓨터 |
enrollment(카디 4 · 디그리 3):
| 학번 | 과목코드 | 성적 |
|---|---|---|
| 2024001 | CS101 | A |
| 2024001 | CS201 | B+ |
| 2024002 | BA101 | A- |
| 2024003 | CS101 | A |
student ⋈ enrollment 결과 (카디 4 · 디그리 4+3−1 = 6).
| 학번 | 이름 | 학년 | 학과 | 과목코드 | 성적 |
|---|---|---|---|---|---|
| 2024001 | 김철수 | 2 | 컴퓨터 | CS101 | A |
| 2024001 | 김철수 | 2 | 컴퓨터 | CS201 | B+ |
| 2024002 | 이영희 | 3 | 경영 | BA101 | A- |
| 2024003 | 박민수 | 1 | 컴퓨터 | CS101 | A |
자연조인 차수 공식: R디그리 + S디그리 − 공통 속성 수. 여기선 4 + 3 − 1 = 6. 공통 속성 '학번'이 한 번만 살아남으니 빼준다.
🔑 암기 ⋈ = 조인 = JOIN ... ON. 자연조인 결과 차수 = R + S − 공통 속성 수 / 카디 = 매칭 쌍만(≤ R카디 × S카디). ⚠️ 함정 '자연조인 차수 = R + S' ❌(→ 공통 속성 빼기·그건 동등조인) / '⋈ = 카티션 곱' ❌(→ ⋈은 매칭만, ×는 모든 쌍). 🎯 빈출 자연조인 차수 계산. 거의 매회. 💡 보충 퍼즐 맞추기 — 두 조각의 공통 속성이 맞물리는 쌍만 결합하고, 안 맞는 조각은 버린다. 실무 SQL에서 가장 자주 쓰는 연산자.
조인 종류 — 자연 / 동등 / 세타 ·조인 종류·
[정의] 조인은 조건 거는 방식에 따라 3종. 좁은 정도로 보면 세타조인 ⊃ 동등조인 ⊃ 자연조인(자연조인이 가장 정제된 형태).
[표] 조인 3종 비교.
| 종류 | 표기 | 조건 | 공통 속성 처리 | 결과 차수 |
|---|---|---|---|---|
| 자연조인(Natural) | R ⋈ S |
같은 이름 속성 자동 = 매칭 | 1개로 합침 | R + S − 공통 |
| 동등조인(Equi) | R ⋈_{R.a=S.b} S |
명시한 = 비교 | 양쪽 다 남김 | R + S |
| 세타조인(Theta) | R ⋈_{조건θ} S |
<, >, ≤, ≥, ≠ 등 | 양쪽 다 남김 | R + S |
🔑 암기 자연조인만 공통 속성을 1개로 합쳐 차수 R+S−공통 / 동등·세타는 안 합쳐 R+S 그대로. 이 차이가 차수 계산 함정의 핵심. ⚠️ 함정 '동등조인 차수 = R+S−공통' ❌(→ 그건 자연조인·동등은 R+S) / '자연조인은 부등호 조건' ❌(→ = 매칭·부등호는 세타조인). 🎯 빈출 자연 vs 동등 차수 차이. 보통. 💡 보충 외부조인(LEFT/RIGHT/FULL OUTER JOIN)은 오늘 범위 밖이지만 키워드만 — NULL로 채워 비매칭 행도 보존. 보기에 'NULL 보존'이 보이면 외부조인.
⋈ 중첩 — student ⋈ enrollment ⋈ course ·조인 중첩·
[정의] 폐쇄 성질로 조인 결과를 또 조인한다. course까지 묶어 '수강생 + 과목명' 한 화면을 만든다(24강 N:M 분해 student·enrollment·course 3 테이블 회수).
[표] course(카디 3 · 디그리 3).
| 과목코드 | 과목명 | 학점 |
|---|---|---|
| CS101 | 자료구조 | 3 |
| CS201 | 데이터베이스 | 3 |
| BA101 | 회계원리 | 3 |
student ⋈ enrollment ⋈ course 결과 (카디 4 · 디그리 = 6 + 3 − 1 = 8, 공통 속성 '과목코드').
| 학번 | 이름 | 학년 | 학과 | 과목코드 | 성적 | 과목명 | 학점 |
|---|---|---|---|---|---|---|---|
| 2024001 | 김철수 | 2 | 컴퓨터 | CS101 | A | 자료구조 | 3 |
| 2024001 | 김철수 | 2 | 컴퓨터 | CS201 | B+ | 데이터베이스 | 3 |
| 2024002 | 이영희 | 3 | 경영 | BA101 | A- | 회계원리 | 3 |
| 2024003 | 박민수 | 1 | 컴퓨터 | CS101 | A | 자료구조 | 3 |
🔑 암기 조인 결과도 릴레이션 → 얼마든지 중첩 가능. 3 테이블 차수 = 6 + course(3) − 공통(과목코드 1) = 8. ⚠️ 함정 '⋈은 두 릴레이션만 다룬다' ❌(→ 폐쇄 성질로 중첩 가능). 🎯 빈출 다중 조인·폐쇄 성질. 간헐. 💡 보충 화면 하나를 그릴 때 평균 3~7개 테이블을 ⋈으로 묶는 게 실무 SQL의 일상이다. 24강에서 N:M으로 분해한 student·enrollment·course가 여기서 그대로 다시 묶인다.
④ Division(÷) — '모든' 조건 만족 ·Division·1순위·
[정의] Division(÷, 나누기) = 릴레이션 R에서 S의 모든 튜플과 빠짐없이 연결되는 부분 튜플을 찾는 연산. 핵심 단어는 단 하나 — '모든'(All-quantifier ∀). 표기 R ÷ S.
[표] 표준 예제 — '모든 과목(CS101·CS201·BA101)을 전부 수강한 학생'.
| 준비물 | 정의 | 내용 |
|---|---|---|
| R | π_{학번, 과목코드}(enrollment) |
학번-과목 매핑 |
| S | π_{과목코드}(course) |
전체 과목코드(CS101·CS201·BA101) |
| R ÷ S | S의 모든 과목코드와 매칭되는 학번 | 3과목 다 들은 학생만 |
위 enrollment 기준으론 3과목을 다 들은 학생이 없어 결과는 공집합. 만약 2024001이 BA101까지 들었다면 → {2024001} 하나가 나온다.
🔑 암기 ÷ = '모든'(All-quantifier ∀). '모든 ~를 ~한 ~' 시나리오면 ÷ 즉답. SQL은 GROUP BY ... HAVING COUNT로 간접 구현.
⚠️ 함정 보기에 '일부·적어도 하나·최소 한 개'가 보이면 ÷ ❌(→ σ나 ⋈). 반드시 '모든·전부·∀'여야 ÷.
🎯 빈출 '모든 ~' 시나리오 → ÷ 용어 찾기. 거의 매회.
💡 보충 스탬프 카드 10칸을 전부 채운 사람만 무료 음료를 받는 그림 — '전부 채웠는가'를 묻는 게 ÷. SNS에서 '모든 인증 계정을 팔로우한 유저' 추출도 같은 ÷다.
일반 집합 연산자 4종
일반 집합 연산자 4종 — ∪·∩·−·× + 합병 가능 조건 ·집합 연산자·
[정의] 수학의 집합 연산을 릴레이션에 그대로 가져온 4종 — 합집합(∪)·교집합(∩)·차집합(−)·카티션 곱(×, Cartesian Product).
[표] 4종 정리.
| 연산 | 기호 | 의미 | 결과 카디 |
|---|---|---|---|
| 합집합 | R ∪ S | R 또는 S에 있는 튜플 | ≤ R + S(중복 제거) |
| 교집합 | R ∩ S | R과 S 모두에 있는 튜플 | ≤ min(R, S) |
| 차집합 | R − S | R에 있고 S엔 없는 튜플 | ≤ R |
| 카티션 곱 | R × S | 모든 튜플 쌍 조합 | R카디 × S카디 |
⚠️ 합병 가능 조건(∪·∩·− 3종에만 적용): ① 차수(디그리) 동일 ② 도메인 동일. 둘 중 하나라도 어긋나면 ∪·∩·−는 아예 적용 불가. 카티션 곱(×)은 이 조건이 적용되지 않는다(차수 달라도 OK).
🔑 암기 합병 가능 = 차수 동일 + 도메인 동일(∪·∩·− 3종). 카티션 곱(×)만 예외 — 차수 합산·카디 곱. ⚠️ 함정 '카티션 곱도 합병 가능 조건 필요' ❌(→ ×는 무관) / '합집합은 차수 달라도 가능' ❌(→ 차수·도메인 동일 필수). 🎯 빈출 합병 가능 조건·× 카디 계산. 보통. 💡 보충 카티션 곱 결과: 차수 = R + S(합산), 카디 = R × S(곱). ×는 일단 모든 쌍을 다 곱해놓고 보는 연산이다.
카티션 곱(×) vs 자연조인(⋈) — 최빈출 함정 ·× vs ⋈·1순위·
[정의] 25강 함정 중의 함정 — × 와 ⋈ 의 분별. 수험생이 가장 자주 미끄러지는 지점이다.
[표] × vs ⋈ 비교.
| 구분 | 카티션 곱(×) | 자연조인(⋈) |
|---|---|---|
| 분류 | 일반 집합 연산자 | 순수 관계 연산자(SPJD) |
| 조건 | 없음 — 모든 쌍 | 공통 속성 = 매칭 |
| 결과 차수 | R + S(합산) | R + S − 공통 속성 수 |
| 결과 카디 | R카디 × S카디(곱) | ≤ R카디 × S카디(매칭만) |
| 의미 | 모든 가능한 조합 | 의미 있는 조합만 |
🔑 암기 × = 무조건 곱(R카디×S카디)·집합 연산자 / ⋈ = 매칭만(≤곱)·순수 연산자. 셀프조디에 × 없음. ⚠️ 함정 '카티션 곱 = 순수 관계 연산자' ❌(→ 집합 연산자) / '× = ⋈(같다)' ❌(→ ×는 모든 쌍, ⋈은 매칭만). 🎯 빈출 × vs ⋈ 카디 계산·분류. 거의 매회. 💡 보충 R카디 5·S카디 4면 R × S는 무조건 카디 20(의미 없는 조합까지 전부), R ⋈ S는 ≤20(공통 속성 맞는 쌍만).
SQL로 가는 다리
8연산자 종합 + SQL 매핑 ·SQL 다리·1순위·
[정의] 오늘 배운 8연산자를 한 장으로 압축하고, 각각이 SQL의 어디로 이어지는지 본다. 이게 관계대수가 SQL의 뼈대인 이유다.
[표] 8연산자 ↔ SQL 매핑.
| 연산자 | 기호 | 분류 | 즉답 | SQL |
|---|---|---|---|---|
| Select | σ | 순수 | 행 | WHERE |
| Project | π | 순수 | 열 | SELECT 컬럼 |
| Join | ⋈ | 순수 | 조인 | JOIN ... ON |
| Division | ÷ | 순수 | 모든 | GROUP BY ... HAVING COUNT(간접) |
| 합집합 | ∪ | 집합 | 또는 | UNION |
| 교집합 | ∩ | 집합 | 그리고 | INTERSECT |
| 차집합 | − | 집합 | 빼기 | EXCEPT / MINUS |
| 카티션 곱 | × | 집합 | 모든 쌍 | CROSS JOIN |
🔑 암기 σ→WHERE · π→SELECT · ⋈→JOIN · ÷→HAVING COUNT(간접). σ·π·⋈ 세 직접 매핑은 반드시 입에 붙이기. ⚠️ 함정 '÷ → ORDER BY' ❌(→ HAVING COUNT·간접·ORDER BY는 정렬) / 'σ → SELECT' ❌(→ WHERE / SELECT는 π). 🎯 빈출 관계대수↔SQL 매핑(짝짓기 오류). 거의 매회. 💡 보충 27강에서 σ·π·⋈·÷가 본격 SQL 문법(WHERE·SELECT·JOIN·HAVING)으로 변신한다 — 25강 셀프조디가 곧 27강 SQL의 밑그림이다.
기출 다지기
[기출 1 출제] 다음 중 순수 관계 연산자(Pure Relational Operator)에 속하지 않는 것은? (소거형)
- ① Select(σ)
- ② Project(π)
- ③ Cartesian Product(×)
- ④ Division(÷)
정답 및 해설 보기
정답 ③
순수 관계 연산자 = SPJD = 셀프조디 = Select(σ)·Project(π)·Join(⋈)·Division(÷) 4종. 카티션 곱(×)은 일반 집합 연산자(∪·∩·−·×)에 속한다.
| 선지 | 분류 | 판정 |
|---|---|---|
| ① Select | 순수(S) | 옳음 |
| ② Project | 순수(P) | 옳음 |
| ③ Cartesian Product | 일반 집합 | 정답(아닌 것) |
| ④ Division | 순수(D) | 옳음 |
🔑 셀·프·조·디 4글자에 없는 단어가 정답 — ×·∪·∩·−는 전부 일반 집합 연산자.
[기출 2 출제] 관계대수 연산에 대한 설명으로 옳은 것은? (설명 판단형)
- ① σ는 릴레이션의 열(속성)을 추출하는 연산이다.
- ② π는 릴레이션의 행(튜플)을 추출하는 연산이다.
- ③ σ의 결과 차수(Degree)는 원본 릴레이션과 동일하다.
- ④ π는 SQL의 WHERE 절에 대응된다.
정답 및 해설 보기
정답 ③
σ는 행만 자르므로 열 수(차수)는 그대로다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① σ는 열 추출 | 오답 | σ는 행(수평 부분집합) |
| ② π는 행 추출 | 오답 | π는 열(수직 부분집합) |
| ③ σ 차수 동일 | 정답 | σ는 행만 자르니 열 수 그대로 |
| ④ π → WHERE | 오답 | π → SELECT 컬럼, σ → WHERE |
🔑 σ=행=수평=WHERE / π=열=수직=SELECT — 방향만 안 헷갈리면 다 맞는다.
[기출 3 출제] 릴레이션 R(A, B, C, D)와 S(C, D, E)가 있다. 자연조인 R ⋈ S의 결과 릴레이션의 차수(Degree)는? (값 계산)
- ① 4
- ② 5
- ③ 6
- ④ 7
정답 및 해설 보기
정답 ②
자연조인 차수 = R디그리 + S디그리 − 공통 속성 수. R(A,B,C,D)=4, S(C,D,E)=3, 공통 속성 C·D=2개 → 4 + 3 − 2 = 5(스키마 A,B,C,D,E).
| 헷갈리는 보기 | 판정 | 근거 |
|---|---|---|
| 4 + 3 = 7 | 오답 | 공통 안 뺌 → 동등조인 차수 |
| 4 + 3 − 2 = 5 | 정답 | 자연조인 — 공통 C·D를 1개씩만 남김 |
| 4 × 3 = 12 | 오답 | 차수는 곱이 아니라 합산(카티션 곱도 7) |
🔑 자연조인은 공통 속성을 1개로 합치니 빼기, 동등조인은 양쪽 다 남기니 그대로 합산.
[기출 4 출제] 다음 질의에 가장 적합한 관계대수 연산자는? (설명→용어 찾기)
'모든 과목을 수강한 학생의 학번을 검색하라.'
- ① Select(σ)
- ② Project(π)
- ③ Join(⋈)
- ④ Division(÷)
정답 및 해설 보기
정답 ④
발문에 '모든'이 보이는 순간 ÷ 확정. 표준 풀이는 R = π_{학번,과목코드}(enrollment) ÷ S = π_{과목코드}(course) — S의 모든 과목코드와 매칭되는 학번이 곧 '모든 과목 수강한 학생'.
| 선지 | 핵심 의미 | 적합도 |
|---|---|---|
| ① σ | 조건 만족 행 추출 | 오답 — 단일 행 조건 |
| ② π | 열 추출 | 오답 — 행 선별 못 함 |
| ③ ⋈ | 두 릴레이션 결합 | 오답 — '모든'의 의미 없음 |
| ④ ÷ | 모든 ~ 만족 | 정답 |
🔑 '일부·적어도 하나·최소'면 σ나 ⋈, '모든·전부·∀'면 ÷ — 단어 하나로 갈린다.
[기출 5 출제] 관계대수와 SQL의 매핑이 틀린 것은? (짝짓기 오류형)
- ① σ → WHERE 절
- ② π → SELECT 컬럼리스트
- ③ ⋈ → JOIN ... ON
- ④ ÷ → ORDER BY 절
정답 및 해설 보기
정답 ④
÷의 SQL 표현은 GROUP BY ... HAVING COUNT(또는 NOT EXISTS 중첩)로 간접 구현된다. ORDER BY는 정렬 절이라 ÷와 무관.
| 선지 | 매핑 | 정오 |
|---|---|---|
| ① σ → WHERE | 행 필터 | 옳음 |
| ② π → SELECT 컬럼 | 열 선택 | 옳음 |
| ③ ⋈ → JOIN ON | 결합 | 옳음 |
| ④ ÷ → ORDER BY | ORDER BY는 정렬 | 정답(틀림) |
🔑 σ·π·⋈ 셋은 SQL에 직접(WHERE·SELECT·JOIN), ÷는 간접(HAVING COUNT). ORDER BY는 8연산자 어디에도 직접 대응이 없다.
[기출 6 출제] 카디널리티가 각각 5, 4인 두 릴레이션 R, S에 대한 설명으로 옳은 것은? (값 계산·분별)
- ① R × S의 결과 카디널리티는 9이다.
- ② R × S의 결과 카디널리티는 20이다.
- ③ 카티션 곱(×)은 순수 관계 연산자에 속한다.
- ④ R ⋈ S의 결과 카디널리티는 항상 20이다.
정답 및 해설 보기
정답 ②
카티션 곱 결과 카디 = R카디 × S카디 = 5 × 4 = 20(모든 튜플 쌍 조합).
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 카디 9 | 오답 | 9 = 5 + 4(합)·카티션 곱은 곱 |
| ② 카디 20 | 정답 | 5 × 4 = 20(모든 쌍) |
| ③ × = 순수 연산자 | 오답 | ×는 일반 집합 연산자(셀프조디 ❌) |
| ④ ⋈ 항상 20 | 오답 | ⋈은 매칭만 → ≤20(항상 20 아님) |
🔑 × = 무조건 곱(20)·집합 연산자 / ⋈ = 매칭만(≤20)·순수 연산자.
[기출 7 출제] 관계해석(Relational Calculus)에 대한 설명으로 옳지 않은 것은? (부정형)
- ① 비절차적(Non-procedural) 언어이다.
- ② 원하는 결과가 무엇인지(What)를 명시하는 언어이다.
- ③ 튜플 관계해석과 도메인 관계해석 두 종류가 있다.
- ④ 관계대수보다 표현력(Expressive Power)이 강하다.
정답 및 해설 보기
정답 ④
관계대수와 관계해석은 표현력이 동등하다(코드 정리). 어느 한쪽이 더 강하지 않다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 비절차적 | 옳음 | 관계해석 = 비절차적(What) |
| ② What 명시 | 옳음 | 결과만 명시(과정 X) |
| ③ 2종 | 옳음 | 튜플·도메인 관계해석 |
| ④ 표현력 더 강함 | 정답(틀림) | 관계대수와 동등 |
🔑 관계대수=절차적·1종 / 관계해석=비절차적·2종, 표현력은 동등.
한 장 요약
| 영역 | 핵심 | 암기팁 |
|---|---|---|
| 관계대수 | 절차적(How)·입출력 릴레이션·폐쇄 성질·E.F.코드 1970 | 중첩 가능(폐쇄 성질) |
| 관계해석 | 비절차적(What)·2종(튜플·도메인)·표현력 동등 | 관계대수=1종, 관계해석=2종 |
| 순수 4종 | Select·Project·Join·Division | SPJD = 셀프조디 |
| σ (Select) | 행(수평)·차수 동일·카디 감소 | σ=행=WHERE |
| π (Project) | 열(수직)·차수 감소·중복 자동 제거 | π=열=SELECT(DISTINCT) |
| ⋈ (Join) | 두 릴레이션 결합·공통 속성 매칭 | 자연조인 차수 = R+S−공통 |
| 조인 3종 | 자연(합침)·동등(=)·세타(부등호) | 자연만 R+S−공통, 동등·세타는 R+S |
| ÷ (Division) | '모든' 조건 만족(All-quantifier ∀) | ÷=모든 |
| 집합 4종 | ∪·∩·−·× | 합병 가능 = 차수+도메인 동일(× 제외) |
| × vs ⋈ | ×=곱·집합 / ⋈=매칭·순수 | 셀프조디에 × 없음 |
| SQL 다리 | σ→WHERE·π→SELECT·⋈→JOIN·÷→HAVING COUNT | 27강 본격 변신 |
🎯 합격 한 끗: 25강은 셀프조디(SPJD) 한 두음이 거의 전부다 — σ=행·π=열·⋈=조인·÷=모든. 거기에 함정 5쌍만 더 굴리면 끝 — ① σ↔π 바꿔치기 · ② 카티션 곱(×)=순수 관계 연산자(❌·집합) · ③ 자연조인 차수=R+S(❌·−공통 빼기) · ④ ×=⋈(❌·곱 vs 매칭) · ⑤ ÷=일부 만족(❌·모든). 이 다섯이면 25강 출제분의 80%는 즉답이다.
