2021. 10. 12. 21:13ㆍMajor`/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값으로 채운다