학습(공부)하는 블로그 :: 6. 관계 데이터 연산 (2) - 셀렉트, 프로젝트, 조인, 디비전, 관계 해석
 

 
반응형
블로그 이미지
학습하고 공부한 것을 보고 싶을때 다시 볼려고 요약해서 정리한 블로그입니다. 좋은 정보는 서로 공유합시다. 깨비형
« 2026/7 »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Archive»


Category»

Notice»

Recent Post»

Recent Comment»

Recent Trackback»

07-18 21:06

반응형

 

📋 이 글의 핵심 요약 (TL;DR)

  • 순수 관계 연산자 4개 : 셀렉트(σ) · 프로젝트(π) · 조인(⋈) · 디비전(÷)
  • 셀렉트 : 조건을 만족하는 튜플 추출 → 수평적 부분집합 / 교환적 특성 있음
  • 프로젝트 : 원하는 속성만 추출 → 수직적 부분집합 / 중복 튜플 자동 제거
  • 조인 : 공통 속성으로 두 릴레이션 결합 → 세타 조인 ⊃ 동등 조인 ⊃ 자연 조인
  • 디비전 : R÷S = "S의 모든 튜플과 관련된 R의 튜플" 추출
  • 확장 연산자 : 세미 조인(⋉) — 조인 비용 절감 / 외부 조인 — NULL 포함하여 누락 없이 결합
  • 관계 해석 : 비절차 언어, 수학 프레디킷 해석 기반, 관계 대수와 표현력 동등

 

 

 

01 순수 관계 연산자란?

 

앞서 살펴본 일반 집합 연산자(합집합·교집합·차집합·카티션 프로덕트)가 수학의 집합 개념을 그대로 빌려온 것이라면, 순수 관계 연산자(Relational Operation)는 릴레이션 고유의 구조와 특성을 이용하기 위해 데이터베이스를 위해 새롭게 정의된 연산자입니다.

 

연산자 기호 표현 의미
셀렉트 σ σ조건(R) 릴레이션 R에서 조건을 만족하는 튜플들을 반환
프로젝트 π π속성리스트(R) 릴레이션 R에서 지정한 속성들의 값으로만 구성된 튜플들을 반환
조인 R⋈S 공통 속성을 이용해 두 릴레이션의 튜플을 연결하여 만든 새로운 튜플 반환
디비전 ÷ R÷S 릴레이션 S의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들을 반환

 

💡 보조 연산자 — 재명명(Rename, ρ)

기본 연산자 4개 외에도 릴레이션이나 속성의 이름을 변경하는 재명명 연산자 ρ(로, rho)가 있습니다.

주된 사용 상황은 하나의 릴레이션을 자기 자신과 조인하는 셀프 조인(Self-Join)입니다. 같은 릴레이션을 두 번 참조할 때 이름이 충돌하므로, ρ로 임시 별칭을 붙여 충돌을 막습니다.
예: 직원 테이블에서 "상사-부하 관계"를 조회할 때 직원 릴레이션을 E1, E2로 재명명하여 셀프 조인

 

 

 

02 셀렉트(Select) — σ

 

정의 : 릴레이션에서 조건을 만족하는 튜플만 선택하여 결과 릴레이션을 구성하는 연산
결과의 성격 : 연산 대상 릴레이션의 수평적(가로) 부분집합 — 행(튜플)을 걸러내는 연산

 

항목 내용
수학적 표현 σ조건식(릴레이션)
데이터 언어적 표현 릴레이션 where 조건식
조건식(Predicate) 비교 연산자(>, ≥, <, ≤, =, ≠) + 논리 연산자(∧, ∨, ¬) 조합
교환적 특성 σ조건1(σ조건2(R)) = σ조건2(σ조건1(R)) = σ조건1∧조건2(R) ✅
피연산자 수 하나의 릴레이션만 대상으로 연산 수행 (단항 연산)

 

✅ 예시 1 — 단순 조건
"고객 릴레이션에서 등급이 gold인 튜플 검색"

σ등급='gold'(고객) 또는 고객 where 등급 = 'gold'

→ 결과 : apple(김현준, 20, gold, 학생, 1000) / carrot(원유선, 28, gold, 교사, 4500)
banana(vip), orange(silver) 튜플은 조건 불만족으로 제외

 

✅ 예시 2 — AND 복합 조건
"고객 릴레이션에서 등급이 gold이고, 적립금이 2000 이상인 튜플 검색"

σ등급='gold' ∧ 적립금≥2000(고객) 또는 고객 where 등급 = 'gold' and 적립금 ≥ 2000

→ 결과 : carrot(원유선, 28, gold, 교사, 4500)만 해당
apple은 gold이지만 적립금 1000으로 조건 불만족

 

 

 

03 프로젝트(Project) — π

 

정의 : 릴레이션에서 선택한 속성의 값으로만 결과 릴레이션을 구성하는 연산
결과의 성격 : 연산 대상 릴레이션의 수직적(세로) 부분집합 — 열(속성)을 걸러내는 연산
중복 제거 : 결과 릴레이션에서 동일한 튜플은 중복되지 않고 한 번만 나타남

 

항목 내용
수학적 표현 π속성리스트(릴레이션)
데이터 언어적 표현 릴레이션[속성리스트]
피연산자 수 하나의 릴레이션만 대상으로 연산 수행 (단항 연산)

 

✅ 예시 1 — 여러 속성 추출
"고객 릴레이션에서 고객이름, 등급, 적립금 검색"

π고객이름,등급,적립금(고객) 또는 고객[고객이름,등급,적립금]

→ 결과 : 고객이름/등급/적립금 3개 속성만 남은 4개 튜플
고객아이디·나이·직업 속성은 제외됨

 

✅ 예시 2 — 단일 속성 추출 (중복 제거 확인)
"고객 릴레이션에서 등급 검색"

π등급(고객)

→ 결과 : gold / vip / silver — 총 3개
원본에 gold가 2번 등장하지만 중복 제거 → 한 번만 나타남

 

💡 셀렉트 vs 프로젝트 — 핵심 차이 정리

셀렉트(σ) : 원하는 행(튜플) 추출 → 결과가 원본의 수평적 부분집합
프로젝트(π) : 원하는 열(속성) 추출 → 결과가 원본의 수직적 부분집합

→ SQL에 대응하면 : 셀렉트는 WHERE절, 프로젝트는 SELECT절에 해당합니다.

 

 

 

 

04 조인(Join) — ⋈

 

정의 : 조인 속성(두 릴레이션이 공통으로 가진 속성)을 이용해 두 릴레이션을 조합하여 결과 릴레이션을 구성. 조인 속성의 값이 같은 튜플만 연결하여 결과에 포함시킵니다.

 

▶ 조인의 종류 — 세타 조인 ⊃ 동등 조인 ⊃ 자연 조인

 

종류 표현법 특징
세타 조인
(Theta-Join)
R ⋈AθB S
(θ = 비교 연산자)
가장 일반화된 조인. 비교 연산자(>, ≥, <, ≤, =, ≠) 모두 사용 가능
결과 차수 = R 차수 + S 차수
동등 조인
(Equi-Join)
R ⋈A=B S 세타 조인에서 θ가 "=" 인 경우
결과에 조인 속성이 두 번 나타남 (중복 속성 존재)
자연 조인
(Natural-Join)
R ⋈N S 동등 조인 결과에서 중복 조인 속성을 한 번만 나타나게 함
실무에서 가장 많이 쓰이는 형태

 

 

✅ 자연 조인 예시
고객 릴레이션(고객아이디, 고객이름, 나이, 등급)과 주문 릴레이션(주문번호, 고객아이디, 주문제품, 수량)을 자연 조인
조인 속성 = 고객아이디 (두 릴레이션 공통 속성)

고객 ⋈N 주문 → 결과 : 고객아이디 / 고객이름 / 나이 / 등급 / 주문번호 / 주문제품 / 수량
→ orange(정지영)는 주문 내역이 없으므로 결과 릴레이션에 포함되지 않음
→ 동등 조인과 달리 고객아이디는 한 번만 나타남

 

 

 

05 디비전(Division) — ÷

 

정의 : 릴레이션 S의 모든 튜플과 관련이 있는 릴레이션 R의 튜플로 결과 릴레이션을 구성
연산 조건 : R이 S의 모든 속성을 포함하고 있어야 함 (도메인이 같아야 함)

 

💡 직관적으로 이해하는 디비전
정수 나눗셈 12 ÷ 2 = 6 에서 "2와 곱해서 12 이하가 되는 가장 큰 수(6)"를 찾는 것처럼,
릴레이션 디비전도 "S의 모든 튜플과 매핑되는 R의 튜플"을 찾아냅니다.

쉬운 예 : "모든 금상(gold) 등급 조건을 만족하는 고객을 찾아라" 같은 질의에 적합

학술 노트 — 파생 연산자(Derived Operator) : 디비전(÷)은 독자적인 기본 연산자가 아닙니다. 프로젝트(π) · 카티션 프로덕트(×) · 차집합(−) 세 가지를 조합하면 동일한 결과를 낼 수 있어 '파생 연산자'로 분류됩니다. 마찬가지로 조인(⋈)도 카티션 프로덕트(×)와 셀렉트(σ)의 조합으로 구현할 수 있어 파생 연산자에 해당합니다. 기사 시험에서 "기본 연산자에 해당하는 것은?" 형태의 함정 문제로 자주 출제되니 주의하세요.

 

✅ 예시
고객 릴레이션에서 등급이 gold인 튜플을 추출하는 우수등급 릴레이션(등급 = 'gold')과 디비전

고객 ÷ 우수등급 → 등급이 gold인 고객 : apple(김현준), carrot(원유선)
banana(vip), orange(silver)는 우수등급 릴레이션의 'gold'와 관련 없으므로 제외

 

⚠️ 디비전 연산과 SQL — DIVIDE 연산자는 없다

관계 대수의 디비전 연산은 개념은 직관적이지만, 표준 SQL에는 DIVIDE 또는 DIVIDE BY 같은 직접적인 연산자가 존재하지 않습니다.

따라서 실무나 코딩 테스트에서 디비전과 동일한 결과를 얻으려면 아래 두 가지 방법으로 간접 구현해야 합니다.

· NOT EXISTS 이중 중첩 : "S에 있는데 R에 없는 경우가 존재하지 않는" 튜플을 역방향으로 필터링
· GROUP BY + HAVING COUNT : 그룹별 개수를 S의 전체 튜플 수와 비교하여 추출

→ 관계 대수로는 한 줄인 R÷S가 SQL에서는 복잡한 서브쿼리로 변환된다는 점, 이론과 실무의 간격을 기억해 두세요.

 

 

 

06 관계 대수 복합 질의 — 연산자 조합

 

관계 대수는 폐쇄 특성(Closure Property) 덕분에 연산 결과도 릴레이션이므로, 여러 연산자를 중첩하여 복잡한 질의를 표현할 수 있습니다.

 

질의 관계 대수 표현
등급이 gold인 고객의 이름과 나이를 검색 π고객이름,나이(σ등급='gold'(고객))
셀렉트로 튜플 필터 → 프로젝트로 속성 선택
고객이름이 원유선인 고객의 등급과, 원유선이 주문한 주문제품·수량 검색 π등급,주문제품,수량(σ고객이름='원유선'(고객 ⋈ 주문))
조인으로 두 릴레이션 합치기 → 셀렉트 → 프로젝트
주문수량이 10개 미만인 주문 내역을 제외하고 검색 주문 − (σ수량<10(주문))
차집합을 이용한 역방향 필터링

 

 

 

07 확장된 연산자 ① — 세미 조인(Semi-Join) ⋉

 

정의 : 릴레이션 S를 조인 속성으로 프로젝트 연산한 후, 그 결과를 R에 자연 조인하는 연산
목적 : 불필요한 속성을 미리 제거하여 조인 연산 비용을 줄이는 것이 핵심 장점
표현법 : 릴레이션1 ⋉ 릴레이션2

 

항목 내용
결과 차수 R의 차수와 동일 (더 작은 쪽 기준)
예: R 차수 3, S 차수 4, 공통 속성 1개 → 결과 차수 3
교환적 특성 ❌ 없음 — R⋉S ≠ S⋉R
활용 사례 "주문한 적이 있는 고객의 데이터만 검색" — 주문제품 등 불필요 속성 없이 고객 정보만 반환

 

 

 

08 확장된 연산자 ② — 외부 조인(Outer-Join)

 

정의 : 자연 조인에서 제외되는 튜플도 결과 릴레이션에 포함시키는 조인
매칭되지 않아 속성 값이 없는 자리는 NULL로 채웁니다.
등장 배경 : 자연 조인은 조인 속성 값이 일치하는 튜플만 포함하므로, 한쪽에만 존재하는 데이터가 누락될 수 있습니다. 외부 조인은 이 문제를 해결합니다.

 

종류 표현법 동작
왼쪽 외부 조인
(Left Outer Join)
R1 ⟕ R2 왼쪽 릴레이션(R1)의 모든 튜플 포함
오른쪽에 대응 없으면 NULL 처리
오른쪽 외부 조인
(Right Outer Join)
R1 ⟖ R2 오른쪽 릴레이션(R2)의 모든 튜플 포함
왼쪽에 대응 없으면 NULL 처리
완전 외부 조인
(Full Outer Join)
R1 ⟗ R2 두 릴레이션 모든 튜플 포함
어느 쪽이든 대응 없으면 NULL 처리

 

 

✅ 예시 — 고객 릴레이션 ⟕ 주문 릴레이션 (왼쪽 외부 조인)

고객에는 있지만 주문 내역이 없는 orange(정지영)도 결과에 포함됨
→ orange 행의 주문번호, 주문제품 칸은 NULL

"주문을 아직 하지 않은 고객 포함 전체 고객 목록을 보고 싶다"는 요구에 적합

 

✅ 예시 — 고객 릴레이션 ⟖ 주문 릴레이션 (오른쪽 외부 조인, 고객아이디 NULL인 주문 추가 상황)

주문번호 1004 / 고객아이디 NULL / 주문제품 얼큰라면이 주문 릴레이션에 추가된 상황
→ 오른쪽(주문) 모든 튜플 포함 → 1004행의 고객아이디, 고객이름, 나이는 NULL

"고객을 알 수 없는 주문도 포함해서 전체 주문 목록을 보고 싶다"는 요구에 적합

 

 

 

09 관계 해석(Relational Calculus)

 

정의 : 처리를 원하는 데이터가 무엇인지(What)만 기술하는 언어
특성 : 비절차 언어(Non-Procedural) — 어떻게 처리할지 순서를 명시하지 않음
기반 : 수학의 프레디킷 해석(Predicate Calculus)에 기반

 

비교 항목 관계 대수 관계 해석
언어 유형 절차 언어 (How) 비절차 언어 (What)
기반 연산자 중심 프레디킷 해석(수학)
표현력 기능과 표현력 측면에서 동등
분류 튜플 관계 해석 / 도메인 관계 해석

 

 

 

📌 핵심 정리

· 셀렉트(σ) : 조건 만족 튜플 추출 → 수평적 부분집합, 교환적 특성 있음
· 프로젝트(π) : 원하는 속성만 추출 → 수직적 부분집합, 중복 자동 제거
· 조인(⋈) : 세타 ⊃ 동등(=) ⊃ 자연(중복 속성 제거) 순으로 특수화됨
· 디비전(÷) : S의 모든 튜플과 관련된 R의 튜플 추출 / R이 S 속성 포함 조건 필수
· 세미 조인(⋉) : S를 먼저 프로젝트 후 R에 자연 조인 → 비용 절감 / 교환 불가
· 외부 조인 : 왼쪽(⟕) / 오른쪽(⟖) / 완전(⟗) — 누락 튜플은 NULL로 보완
· 관계 해석 : 비절차 언어, 프레디킷 해석 기반, 관계 대수와 표현력 동등

 

 

 

태그 : 순수 관계 연산자란셀렉트 프로젝트 차이관계 대수 조인 종류자연 조인 동등 조인 차이디비전 연산이란세미 조인이란외부 조인 종류 차이관계 해석이란데이터베이스 관계 대수left outer join null 처리

반응형
: