-> 블로그 이전

[DB] 관계 데이터 연산

2021. 10. 12. 21:13Major`/DB

관계 데이터 모델에서의 DB 언어 : 관계 데이터 모델 기반 DBMS에서 원하는 정보를 얻기 위해 사용하는 언어

1. 관계 해석(Relational Calculus)

  • 원하는 결과를 얻기 위해, 찾기를 원하는 데이터가 무엇인지만 명시하는 비절차적 언어

2. 관계 대수(Relational Algebra)

  • 원하는 데이터를 얻기 위해, 데이터를 어떻게 찾는지에 대한 처리과정을 명시하는 절차적 언어
구분 관계 해석 관계 대수
특징 비절차적 언어(계산 수식의 유연적 사용)
프레디킷 해석(Predicate Calculus) 기반
절차적 언어(순서 명시)
목적 무엇을 얻을 것인가?(What) 어떻게 유도하는가?(How)
종류 튜플 관계 해석, 도메일 관계 해석 순수관계 연산자, 일반집합 연산자

※ 관계 대수나 관계 해석으로 기술할 수 있는 모든 질의를 기술할 수 있는 DB 언어를 관계적으로 완전(Relationally Complete)하다고 판단

 

관계 대수식

- 관계 대수는 릴레이션 간 연산을 통해 결과 릴레이션을 찾는 절차를 기술한 언어

- 이 연산을 수행하기 위한 식을 관계 대수식(Relational Algebra Expression)이라고 한다.

- 단항 연산자 : 연산자 <조건> 릴레이션

- 이항 연산자 : 릴레이션 1 연산자 <조건> 릴레이션 2

관계 대수 연산자

1. 셀렉트(SELECT)

- 릴레이션에서 원하는 행(투플)을 추출하기 위한 연산자

- 단항 연산자

- 찾고자 하는 투플의 조건(Predicate)을 명시하고 그 조건에 만족하는 투플을 반환

- 결과 릴레이션 차수 = 입력 릴레이션 차수

- 결과 릴레이션 카디날리티 ≤ 입력 릴레이션 카디날리티

※ 셀렉트 조건(Predicate)

  • 릴레이션의 속성, 상수, 비교 연산자(=,<>,≤,≥, <,>), 논리 연산자(AND, OR, NOT)를 조합하여 사용

2. 프로젝트(Project)

- 릴레이션에서 원하는 열(속성)을 추출하기 위한 연산

- 단항 연산자

- 중복된 투플들이 존재 가능 -> 최종 결과 릴레이션에는 중복된 투플이 제거

- 결과 릴레이션 차수 ≤ 입력 릴레이션 차수

- 결과 릴레이션 카디날리티 = 입력 릴레이션 카디날리티 (중복 투플이 없는 경우)

- 결과 릴레이션 카디날리티 < 입력 릴레이션 카디날리티 (중복 투플 존재)

3. 집합 연산자

- 릴레이션이 투플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용됨

- 이항 연산자

- 종류 : 합집합, 교집합, 차집합

- 집합 연산자의 입력으로 사용되는 2개의 릴레이션은 합병 가능 조건을 만족해야 한다

 

※ 합병 가능(Union Compatible) 조건

- 즉, 두 릴레이션의 속성 수가 같고, 대응되는 속성의 도메인이 같아야 한다 (속성의 이름은 상관없다)

'나이' 속성의 도메인이 다르기 때문에 합병 불가능
속성 수가 동일하고 도메인 또한 동일하기 때문에 합병 가능

3-1. 합집합(Union)

- 결과 릴레이션에서 중복된 투플들은 제외

- 차수 = R과 S의 차수

- 카디날리티 ≤ R 카디날리티 + S 카디날리티

3-2. 교집합(Intersection)

- 차수 = R과 S의 차수

- (카디날리티 ≤ R 카디날리티) AND (카디날리티 ≤ S 카디날리티)

3-3. 차집합(Relative Complement)

- 차수 = R과 S의 차수

- R-S 카디날리티 ≤ R 카디날리티

4. 카티션 프로덕트(Cartesian Product)

- 두 릴레이션을 연결시켜 하나로 합칠 때 사용

- 이항 연산자

- R과 S의 투플들의 모든 가능한 조합을 이루어진 릴레이션

- 결과 릴레이션에서 동일한 속성들을 구분하기 위해 속성 이름 앞에 릴레이션 이름을 붙인다

 

ex) 카디날리티가 i인 릴레이션 R(차수 n)과 카디날리티 j인 릴레이션 S(차수 m)의 카티션 곱 R × S

- 차수 = n+m

- 카디날리티 = i×j

5. 조인(Join)

- 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 투플을 수평으로 결합하는 연산자

- 이항 연산자

- 기본 연산 : 세타 조인(Theta), 동등 조인(Equi), 자연 조인(Natural)

- 확장된 조인 연산 : 외부 조인(Outer) -> (왼쪽, 오른쪽, 완전)

 

5-1. 세타 조인(Theta Join)

- 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 투플만 반환한다.

- 조건 : {=,≠,≤,≥, <,>}

5-2. 동등 조인(Equi Join)

- 세타 조인에서 '=' 연산자를 사용한 조인

- 보통 조인 연산이라고 하면 동등 조인을 의미한다

5-3. 자연 조인(Natural Join)

- 동등 조인에서 조인에 참여한 속성이 2번 나오지 않도록 2번째 속성을 제거한 결과를 반환

- 여러 조인 연산자들 중 가장 자주 사용

6. 외부 조인(Outer Join)

- 자연 조인 시 조인에 실패한 투플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환

6-1. 왼쪽 외부 조인(Left Outer Join)

- 왼쪽 릴레이션은 전부 작성한 다음에 오른쪽 릴레이션 값은 각각에 대응해서 반환

- 대응 값이 없으면 NULL 반환

6-2. 오른쪽 외부 조인(Right Outer Join)

- 오른쪽 릴레이션은 전부 작성한 다음에 왼쪽 릴레이션 값은 각각에 대응해서 반환

- 대응 값이 없으면 NULL 반환

6-3. 완전 외부 조인(Full Outer Join)

- 양쪽 릴레이션의 모든 투플들을 결과에 포함시키고, 만일 상대 릴레이션에 관련된 투플이 없으면 NULL값으로 채운다