본문 바로가기
프로그래밍/database

관계 대수의 기본 연산자

by 신일석 2019. 6. 2.

관계 대수

기본 연산자

단항 연산자(unary operator)

  • 셀렉트
  • 프로젝트
  • 리네임

이항 연산자(binary operator)

  • 합집합
  • 차집합
  • 카티션 프로덕트

<참고. 그리스 소문자>

이름 소문자
시그마 σ (대문자는 Σ)
파이 π
ρ
세타 θ

단항 연산자

셀렉트

릴레이션에서 조건을 만족하는 레코드를 선택하는 것으로 시그마 기호로 표시한다.

σ조건(R)

σ번지=231(회원)

프로젝트 연산자

한 릴레이션의 여러 속성 중 특정 속성만 선택하는 것으로 파이 기호로 표시한다.

수학적인 관점에서 릴레이션은 집합이므로 프로젝트된 릴레이션에서 중복되는 레코드는 제거된다.

πA1,A2,...,An(R)

π주소,전화번호,소속(회원)

리네임 연산자

관계 대수식에서 결과로 생성된 릴레이션은 이름이 없어, 참조할 수 있는 이름을 부여해야 한다.

리네임 연산으로 그리스 소문자 로(ρ)를 사용한다.

<R을 x로 이름을 부여>

ρx(R)

ρcs번지=231(회원))

<R을 x로 이름을 부여하고 n개의 속성 이름까지 부여>

ρx(A1,A2,...,An)(R)

이항 연산자

집합 연산자

집합론을 이론적 배경으로 하는 릴레이션은 동일한 스키마를 만족하는 레코드의 집합이라고 할 수 있기 때문에 릴레이션에서 합집합, 교집합, 차집합 연산자를 동일하게 적용할 수 있다.

릴레이션은 호환 가능한 릴레이션간에 사용할 수 있으므로 집합 연산자를 사용하기 위해서는 아래 두 조건을 만족해야 한다.

집합 연산자를 사용하기 위한 두 릴레이션을 R과 S라 할때

  1. R과 S는 가지고 있는 속성의 수가 같아야 한다.
  2. 모든 i에 대해 릴레이션 R의 i번째 속성의 모데인과 릴레이션 S의 i번째 속성의 도메인이 서로 같아야 한다.
합집합 연산자

두 개의 릴레이션을 입력으로 받는 이항 연산자로, 두 릴레이션이 포함된 모든 레코드를 갖는 릴레이션을 결과값으로 가지며, 합집합 연산자 '∪'를 나타낸다.

π회원명(σ주소='서울'∧'성별='남')(회원) ∪ π회원명(σ주소='경기'∧'성별='남')(회원)

논리 접속자: ∨, ∧, ¬, ⊃, ≡

차집합 연산자

차집합 연산자는 한 릴레이션에는 포함되고 다른 릴레이션에는 포함되지 않는 레코드를 가지는 릴레이션을 결과값으로 가지며, '-'로 나타낸다.

π회원명(σ집주소='서울'∧'성별='남')(회원) - π회원명(σ근무지='서울'∧'성별='남')(회원)

교집합 연산자

입력 받은 두 릴레이션에 동시에 포함되는 레코드들의 집합을 결과값으로 가지며, 교집합 연산자 '∩'로 나타낸다.

π회원명(σ집주소='서울'∧'성별='남')(회원) ∩ π회원명(σ근무지='서울'∧'성별='남')(회원)

기본 연산자의 조합

R∩S=R-(R-S)

벤다이어그램으로 생각해 보면 쉽게 이해할 수 있다.

카티션 프로덕트 연산자

앞서 언급된 단항 연산자나 서로 양립 가능한 서로 다른 두 개의 릴레이션과 다르게

서로 다른 릴레이션 간의 관계성을 이용하는 연산자로 'x'로 표시된다.

카티션 프로덕트 연산자는 두 릴레이션의 레코드 간에 모든 조합을 취하는 연산이다.

RxS={(rs) | r∈R∧s∈S}

R릴레이션의 레코드가 4개이고 S릴레이션의 레코드가 4개이면 44=16개가 된다.*

조인 연산

카티션 프로덕트 연산과 다르게 두 릴레이션에서 서로 관련된 레코드만 결합하여 결과 집합에 포함시킨다.

σ회원.주소=사원.주소(회원x사원)

세타 조인

조인 연산 가운데 하나로 관계 연산자 'θ'로 정의되는 조인조건을 가진다.

A라는 속성을 갖는 릴레이션 R과 B라는 속성을 갖는 릴레이션 S에 대한 세타 조인(⋈AθB) 정의

R⋈AθBS=σAθB(RXS)

정의에서 θ는 관계연산자 {=,<,<=,>,>=,!=} 중에 하나가 된다.

θ가 '='이면 동등 조인 또는 이쿼 조인(equi join)이라 하며, 다음과 같이 표현할 수 있다.

회원⋈회원.주소=사원.주소사원

'프로그래밍 > database' 카테고리의 다른 글

MariaDB(MySQL) 외부 접근 허용|금지하기  (0) 2019.05.09