관계대수relational_algebra

Difference between r1.22 and the current

@@ -32,6 +32,20 @@
* [[디비전division]] ÷
나누어지는 릴레이션에서 나누는 릴레이션의 모든 tuple과 관련이 있는 tuple을 구한다.

----
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))
 
[* 황인준 2022-03-23 44m]
 
----
[[https://terms.naver.com/entry.naver?docId=3431166&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 순수 관계 연산자]]
{
[[실렉트select]] σ
@@ -64,6 +78,23 @@
= σ,,조건식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. (뽑힌 비율)
Google:selectivity 하면 '선택도' 라고 보통 번역하는 듯?
[[VG:비율,rate]] [[VG:비,ratio]]
Commutative. ([[VG:교환법칙,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]]가 두번째처럼 변환해 실행한다.
[* KU황인준 2022-04-04 1:04:00]
Up: [[관계데이터연산relationship_data_operation]] > [[관계대수relational_algebra]] 관계연산 관계연산자 relational operation
Ref. [[https://terms.naver.com/entry.naver?docId=3431167&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 셀렉트]]
-----
@@ -95,65 +126,6 @@
-----
[[조인join]] ⨝

'''조인 join 연산'''
 
[[조인속성join_attribute]]을 이용해, 두 [[릴레이션relation]]을 조합하여 하나의 결과 릴레이션을 구성.
join attribute란: 두 relation이 공통으로 가지고 있는 [[속성attribute]].
 
binary operator: (relation, relation) ↦ relation
 
 
자연 조인 natural join ⨝,,N,,
가장 많이 사용되는 조인.
[[자연조인natural_join]]
 
 
세타 조인 theta join ⨝,,AθB,,
자연 조인보다 더 일반화된 조인.
표현
릴레이션1 ⨝,,AθB,, 릴레이션2
에서, AθB는 조인 조건으로, A는 릴레이션1의 [[속성attribute]]이고 B는 릴레이션2의 속성. θ는 비교연산자(>, ≥, <, ≤, =, ≠). 비교 연산이 가능하도록, A와 B는 같은 [[도메인domain]]으로 정의되어야 함.
θ 연산자가 =인 경우, 특별히 동일 조인(equi-join)이라 함.
[[세타조인theta_join]]
 
세미 조인과 외부 조인:
{
[[세미조인semijoin]] : ⋉ ⋊
조인 속성으로 [[프로젝트project]]한 [[릴레이션relation]]을 이용해 조인한다.
//aka semi-join semi_join
[[외부조인outer_join]]
결과 릴레이션에 조인 연산에서 제외되었던 모든 tuple을 포함시킨다.
left outer join ⟕
right outer join ⟖
full outer join ⟗
https://everything2.com/title/outer+join
http://foldoc.org/outer+join
 
[[https://terms.naver.com/entry.naver?docId=3431172&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 확장된 관계 대수 연산자]]
[[https://terms.naver.com/entry.naver?docId=3431173&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 세미 조인]]
[[https://terms.naver.com/entry.naver?docId=3431174&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 외부 조인]]
outer-join으로 표현
R ⨝^^+^^ S 로 표현
}
 
inner_join (also sometimes called "equi-joins" or "natural joins")
https://everything2.com/title/inner+join
http://foldoc.org/inner+join
 
조인검색
{
조인검색 : 여러 개의 [[테이블table]]을 연결하여 데이터를 검색하는 것.
조인검색을 하려면 테이블을 연결해주는 [[속성attribute]]이 필요하고 이 속성을 조인속성이라 함.
조인속성의 이름은 ''(테이블마다?)'' 달라도 되지만 [[도메인domain]]은 반드시 같아야 함.
일반적으로 테이블의 관계를 나타내는 [[외래키foreign_key]]를 조인속성으로 이용한다고. (이유 tbw)
Ref. [[https://terms.naver.com/entry.naver?docId=3431203&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 여러 테이블에 대한 조인 검색]]
}
 
Up: [[관계데이터연산relationship_data_operation]] > [[관계대수relational_algebra]] 관계연산 관계연산자 relational operation
 
Ref. [[https://terms.naver.com/entry.naver?docId=3431169&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 조인]]
https://everything2.com/title/Join
[[HashKr:조인]]
-----
[[디비전division]] ÷

@@ -169,11 +141,23 @@
Ref. [[https://terms.naver.com/entry.naver?docId=3431170&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 디비전]] <--- 다시 읽어볼 것!!!
}

= tmp; select and project. 황인준 =
select operation σ
일부 [[튜플tuple]]만 선택 → 'horizontal partition'
commutative
 
project operation π
일부 [[열column]]만 선택 → 'vertical partition'
not commutative
 
주의: SQL의 SELECT는 위 둘 중 아래(project)에 더 가깝다.
----
Links ko:
https://chartworld.tistory.com/12 관계대수

Twins:
https://foldoc.org/relational+algebra
[[WpKo:관계대수]] - 내용 빈약
[[WpEn:Relational_algebra]]
[[https://terms.naver.com/entry.naver?docId=3431160&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 관계 대수의 개념과 연산자]]



원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술하는 절차 언어(procedural language).[1]
간단히 말해 릴레이션을 처리하는 연산자들의 모임.
수학의 집합 연산자를 차용했음.
관계대수의 피연산자인 릴레이션relation에 연산자를 적용한 결과도 릴레이션이라는 폐쇄특성이 있음.[2]
연산자의 집합으로도 정의할 수 있음.
피연산자는 릴레이션. 연산자를 적용한 결과도 릴레이션. (폐쇄 특성, closure property)
즉, 관계대수릴레이션relation을 연산함.

대표적 연산자 8개는 특성에 따라 두 가지로 분류 가능.
관계 대수 연산자들:
  • 일반 집합 연산자 (set operation)
    릴레이션relation을 대상으로 연산을 수행.
    • 합집합union ∪
      두 릴레이션의 합집합 tuple을 구한다.
    • 교집합intersection ∩
      두 릴레이션의 교집합 tuple을 구한다.
    • 차집합difference −
      두 릴레이션의 차집합 tuple을 구한다.
    • Cartesian product ×
      두 릴레이션의 모든 tuple을 각각 연결하여 생성된 tuple을 구한다.
  • 순수 관계 연산자 (relational operation)
    릴레이션의 구조와 특성을 이용하는 연산자.
    • 실렉트select σ
      릴레이션에서 조건을 만족하는 tuple을 구한다.
    • 프로젝트project π
      릴레이션에서 주어진 속성attribute들의 값으로만 구성된 tuple을 구한다.
    • 조인join
      공통 속성을 이용해 두 릴레이션의 tuple들을 연결하여 생성된 tuple을 구한다.
    • 디비전division ÷
      나누어지는 릴레이션에서 나누는 릴레이션의 모든 tuple과 관련이 있는 tuple을 구한다.


Ex.
SQL relational algebra
SELECT <attribute list> π <attribute list>
WHERE <condition> σ <condition>

SQL문
SELECT BDATE, SALARY FROM EMP WHERE FNAME='John';
에 해당하는 관계대수식:
πBDATE,SALARYFNAME='John'(EMP))

[3]


[https]DB개론: 순수 관계 연산자
{
실렉트select σ
(셀렉트, 실렉트, 선택) 연산

릴레이션relation에서, 주어진 조건을 만족하는 튜플tuple만 선택하여, 결과 릴레이션을 만든다.

"결과 릴레이션은 주어진 릴레이션을 수평으로 절단한 것과 같아 해당 릴레이션의 수평적 부분 집합(horizontal subset)을 생성하는 것과 같다" 이게 뭐지?

unary operator: relation ↦ relation

형식:
σ조건식(릴레이션relation)
데이터 언어의 형식:
릴레이션 where 조건식

조건식을 비교식 또는 프레디킷(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. (뽑힌 비율)
Google:selectivity하면 '선택도' 라고 보통 번역하는 듯?
VG:비율,rate VG:비,ratio
Commutative. (VG:교환법칙,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가 두번째처럼 변환해 실행한다.
[4]


프로젝트project π
프로젝트 연산

릴레이션relation에서 선택한 속성attribute에 해당하는 값으로 결과 relation을 구성.
즉, 주어진 relation의 일부 열로만 구성된, 수직적 부분집합(vertical subset)이 결과 relation으로 됨.

unary operator: relation ↦ relation

수학적 표현:
π속성리스트(릴레이션)
데이터 언어 형식 표현:
릴레이션[속성리스트]

ex. 고객 릴레이션에서 등급을 검색
π등급(고객)
고객[등급]
ex. 고객 릴레이션에서 고객이름, 등급, 적립금을 검색
π고객이름,등급,적립금(고객)
또는
고객[고객이름, 등급, 적립금]

QQQ 이름을 보니... 사영, 프로젝션, VG:사영,projection, VG:사상,mapping 이런거와 관련이 있나?





디비전 division 연산

릴레이션relation R과 S의 디비전(division) 연산은 R ÷ S로 표현.
릴레이션 S의 모든 튜플tuple과 관련있는 릴레이션 R의 tuple로 결과 relation이 구성됨.
다만, R이 S의 모든 속성attribute을 포함하고 있어야 연산이 가능.

binary operator: (relation, relation) ↦ relation

Up: 관계데이터연산relationship_data_operation > 관계대수relational_algebra 관계연산 관계연산자 relational operation
Ref. [https]DB개론: 디비전 <--- 다시 읽어볼 것!!!
}

tmp; select and project. 황인준

select operation σ
일부 튜플tuple만 선택 → 'horizontal partition'
commutative

project operation π
일부 열column만 선택 → 'vertical partition'
not commutative

주의: SQL의 SELECT는 위 둘 중 아래(project)에 더 가깝다.


Links ko:
https://chartworld.tistory.com/12 관계대수