#noindex [[관계데이터연산relationship_data_operation]]([[연산operation]]) 두 가지 중의 하나. 원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술하는 절차 언어(procedural language).[* https://terms.naver.com/entry.naver?docId=3431158&cid=58430&categoryId=58430&expCategoryId=58430] 간단히 말해 릴레이션을 처리하는 연산자들의 모임. 수학의 집합 연산자를 차용했음. '''관계대수'''의 피연산자인 [[릴레이션relation]]에 연산자를 적용한 결과도 릴레이션이라는 폐쇄특성이 있음.[* https://terms.naver.com/entry.naver?docId=3431176&cid=58430&categoryId=58430&expCategoryId=58430] 연산자의 집합으로도 정의할 수 있음. 피연산자는 릴레이션. 연산자를 적용한 결과도 릴레이션. (폐쇄 특성, 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을 구한다. [[https://terms.naver.com/entry.naver?docId=3431166&cid=58430&categoryId=58430&expCategoryId=58430 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,,(릴레이션) Up: [[관계데이터연산relationship_data_operation]] > [[관계대수relational_algebra]] 관계연산 관계연산자 relational operation Ref. [[https://terms.naver.com/entry.naver?docId=3431167&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 셀렉트]] ----- [[프로젝트project]] π '''프로젝트 연산''' [[릴레이션relation]]에서 선택한 [[속성attribute]]에 해당하는 값으로 결과 relation을 구성. 즉, 주어진 relation의 일부 열로만 구성된, 수직적 부분집합(vertical subset)이 결과 relation으로 됨. unary operator: relation ↦ relation 수학적 표현: > π,,속성리스트,,(릴레이션) 데이터 언어 형식 표현: > 릴레이션[속성리스트] ex. 고객 릴레이션에서 등급을 검색 > π,,등급,,(고객) > 고객[등급] ex. 고객 릴레이션에서 고객이름, 등급, 적립금을 검색 > π,,고객이름,등급,적립금,,(고객) 또는 > 고객[고객이름, 등급, 적립금] ''QQQ 이름을 보니... 사영, 프로젝션, [[VG:사영,projection]], [[VG:사상,mapping]] 이런거와 관련이 있나?'' Up: [[관계데이터연산relationship_data_operation]] > [[관계대수relational_algebra]] 관계연산 관계연산자 relational operation Ref. [[https://terms.naver.com/entry.naver?docId=3431168&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 프로젝트]] ----- [[조인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 ----- [[디비전division]] ÷ '''디비전 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://terms.naver.com/entry.naver?docId=3431170&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 디비전]] <--- 다시 읽어볼 것!!! } ---- Links ko: https://chartworld.tistory.com/12 관계대수 Twins: [[WpKo:관계대수]] - 내용 빈약 [[WpEn:Relational_algebra]] [[https://terms.naver.com/entry.naver?docId=3431160&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 관계 대수의 개념과 연산자]] [[https://terms.naver.com/entry.naver?docId=3431171&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 관계 대수를 이용한 질의 표현]] https://everything2.com/title/relational+algebra (not short) Compare: [[관계해석relational_calculus]] Up: [[database]] [[관계데이터연산relationship_data_operation]] Ref. [[https://terms.naver.com/entry.naver?docId=3431176&cid=58430&categoryId=58430&expCategoryId=58430 DB개론: 관계 데이터 연산 요약]]