만족

[Database] 관계대수(Relational Algebra): 셀렉트(SELECT), 프로젝션(PROJECTION), 디비전(DIVISION) 본문

[Database] 관계대수(Relational Algebra): 셀렉트(SELECT), 프로젝션(PROJECTION), 디비전(DIVISION)

DataBase/이론 Satisfaction 2021. 4. 25. 20:10

셀렉트, 프로젝션은 릴레이션을 피연산자로 갖는 단일 연산자이고,

디비전은 두개의 릴레이션을 피연산자로 갖는 이항 연산자이고,

반환하는 값은 모두 하나의 릴레이션이다.

 

셀렉트(SELECT)

 

시그마 기호σ, 조건(선택), 피연산자로 이루어진 단일 연산자이다.

 

주어진 릴레이션에 대해 원하는 조건을 만족하는 튜플을 뽑아 새로운 릴레이션을 만든다.

 

σ이름='홍길동'(국민) 하면

이름 주민등록번호
홍길동 123456-1234567
홍길동 234567-2345678

처럼 나온다.

 

결과값은 피연산자의 튜플 갯수보다 작거나 같다.

 

프로젝션(PROJECTION)

프로젝션 기호∏, 애트리뷰트 집합, 피연산자로 이루어진 단일 연산자이다.

 

주어진 릴레이션에 대해 각 튜플에서 원하는 애트리뷰트 집합으로만 이루어진 새로운 릴레이션을 만든다.

 

∏이름(국민) 하면

이름
홍길동
홍길동
길홍동
동길홍

처럼 나온다.

 

결과값은 피연산자의 튜플 갯수와는 같고, 애트리뷰트 갯수는 작거나 같다.

 

디비전(DIVISION)

 

나누기 기호÷와 두 개의 릴레이션 피연산자로 이루어진 이항 연산자이다.

 

R÷S는 S에 포함된 튜플을 모두 가지는 R의 튜플 중에, S에 포함된 애트리뷰트를 제거하고 반환한다.

 

국민예방접종정보 ÷ σ접종명='감기'∪접종명='코로나'(예방접종)를 계산해 보자.

(감기와 코로나 예방접종을 모두 받은 국민들의 이름을 출력하라)

 

조건이 복잡하므로, 셀렉트(σ) 연산자의 조건은 주황색으로 표시할 것이다.

 

이름 접종명
홍길동 감기
홍길동 코로나
길홍동 감기
동길홍 신종인플루엔자

(국민예방접종정보 릴레이션)

 

접종명
코로나
감기
신종인플루엔자

(예방접종 릴레이션)

 

에서 σ접종명='감기'∪접종명='코로나'(예방접종)은 예방접종 릴레이션에서 접종명이 코로나 또는 감기인 튜플만을 뽑아 새로운 릴레이션을 만드므로,

접종명
코로나
감기

(σ접종명='감기'∪접종명='코로나'(예방접종) 릴레이션)

 

국민예방접종정보 ÷ σ접종명='감기'∪접종명='코로나'(예방접종)는

국민예방접종정보의 접종명 애트리뷰트에 코로나와 감기가 모두 포함되어 있는 튜플로 이루어진 릴레이션을 반환하되,

접종명 애트리뷰트는 표시하지 않는다.

 

이름
홍길동

(국민예방접종정보 ÷ σ접종명='감기'∪접종명='코로나'(예방접종) 릴레이션)

 

접종명에 감기와 코로나가 모두 포함된 사람은 홍길동이 유일하므로,

따라서 결과 릴레이션에서는 홍길동만 표시된다.

 

이 때 디비전의 오른쪽에 나타나는 피연산자 S의 애트리뷰트는 왼쪽 피연산자 R에도 존재하는 애트리뷰트여야 한다.

=> S의 애트리뷰트 집합은 R의 애트리뷰트의 부분집합이여야 한다.

 

가령 R의 애트리뷰트가 {성명, 주민등록번호} 이고

S의 애트리뷰트가 {접종명}일때

R과 S는 디비전 연산을 할 수 없다.

 

디비전은 결합법칙과 교환법칙이 성립하지 않는다

=> R÷S != S÷R



Comments