원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술하는 절차 언어(procedural language).
간단히 말해 릴레이션을 처리하는 연산자들의 모임.
수학의 집합 연산자를 차용했음.
관계대수의 피연산자인
릴레이션relation에 연산자를 적용한 결과도 릴레이션이라는 폐쇄특성이 있음.
연산자의 집합으로도 정의할 수 있음.
피연산자는 릴레이션. 연산자를 적용한 결과도 릴레이션. (폐쇄 특성, closure property)
즉,
관계대수는
릴레이션relation을 연산함.
대표적 연산자 8개는 특성에 따라 두 가지로 분류 가능.
관계 대수 연산자들:
- 일반 집합 연산자 (set operation)
두 릴레이션relation을 대상으로 연산을 수행.
- 합집합union ∪
두 릴레이션의 합집합 tuple을 구한다.
- 교집합intersection ∩
두 릴레이션의 교집합 tuple을 구한다.
- 차집합difference −
두 릴레이션의 차집합 tuple을 구한다.
- Cartesian product ×
두 릴레이션의 모든 tuple을 각각 연결하여 생성된 tuple을 구한다.
- 순수 관계 연산자 (relational operation)
릴레이션의 구조와 특성을 이용하는 연산자.
Ex.
SQL | relational algebra |
SELECT <attribute list> | π <attribute list> |
WHERE <condition> | σ <condition> |
SQL문
SELECT BDATE, SALARY FROM EMP WHERE FNAME='John';
에 해당하는 관계대수식:
πBDATE,SALARY(σFNAME='John'(EMP))
DB개론: 순수 관계 연산자(https://terms.naver.com/entry.naver?docId=3431166&cid=58430&categoryId=58430&expCategoryId=58430)
{
실렉트select σ
(셀렉트, 실렉트, 선택) 연산
"결과 릴레이션은 주어진 릴레이션을 수평으로 절단한 것과 같아 해당 릴레이션의 수평적 부분 집합(horizontal subset)을 생성하는 것과 같다" 이게 뭐지?
unary operator: relation ↦ relation
조건식을 비교식 또는 프레디킷(predicate)이라고도 한다.
(술어predicate?)
조건식에는 비교연산자(>, ≥, <, ≤, =, ≠), 논리연산자(∧, ∨, ¬) 등이 들어감.
ex. 고객 relation에서 등급이 gold인 tuple을 검색하기
σ등급 = 'gold'(고객)
고객 where 등급 = 'gold'
ex2. 고객 relation에서 등급이 gold, 적립금이 2000 이상인 tuple검색
σ등급 = 'gold' ∧ 적립금 ≥ 2000(고객)
고객 where 등급 = 'gold' and 적립금 ≥ 2000
특성: commutative.
σ
조건식1(σ
조건식2(릴레이션))
= σ조건식2(σ조건식1(릴레이션))
= σ조건식1 ∧ 조건식2(릴레이션)
σ<select조건>(R)
릴레이션relation에서, selection_condition을 만족하는 튜플의 부분집합을 선택하는 연산.
'horizontal filtering, horizontal selection, horizontal partition'.
unary_operator.
....
결과로 생긴 relation의
차수degree는 R의 그것과 같다. (당연)
결과로 생긴 relation의
튜플tuple 수(
카디널리티cardinality)는 R의 그것 이하이다. (당연)
Selectivity of the condition: the fraction of tuples selected by a selection condition. (뽑힌 비율)
Commutative. (
교환법칙,commutativity)
σ<cond1>(σ<cond2>(R))=σ<cond2>(σ<cond1>(R))
Select operations의 sequence는 selection_condition들이 AND로 연결된 하나의(single) select operation으로 치환 가능.
σ<C1>(σ<C2>(...σ<Cn>(R)...)) = σ<C1> AND <C2> AND ... AND <Cn>(R)
두번째가 비용(time_complexity?)이 훨씬 적게 든다. 따라서 사용자가 첫번째처럼
질의query를 날리더라도
query_optimizer가 두번째처럼 변환해 실행한다.
릴레이션relation에서 선택한
속성attribute에 해당하는 값으로 결과 relation을 구성.
즉, 주어진 relation의 일부 열로만 구성된, 수직적 부분집합(vertical subset)이 결과 relation으로 됨.
unary operator: relation ↦ relation
수학적 표현:
π속성리스트(릴레이션)
데이터 언어 형식 표현:
릴레이션[속성리스트]
ex. 고객 릴레이션에서 등급을 검색
π등급(고객)
고객[등급]
ex. 고객 릴레이션에서 고객이름, 등급, 적립금을 검색
π고객이름,등급,적립금(고객)
또는
고객[고객이름, 등급, 적립금]
디비전 division 연산
두
릴레이션relation R과 S의
디비전(division) 연산은 R ÷ S로 표현.
릴레이션 S의 모든
튜플tuple과 관련있는 릴레이션 R의 tuple로 결과 relation이 구성됨.
다만, R이 S의 모든
속성attribute을 포함하고 있어야 연산이 가능.
binary operator: (relation, relation) ↦ relation
tmp; select and project. 황인준 ¶
select operation σ
일부
튜플tuple만 선택 → 'horizontal partition'
commutative
project operation π
일부
열column만 선택 → 'vertical partition'
not commutative
주의: SQL의 SELECT는 위 둘 중 아래(project)에 더 가깝다.
Ref.
DB개론: 관계 데이터 연산 요약(https://terms.naver.com/entry.naver?docId=3431176&cid=58430&categoryId=58430&expCategoryId=58430)