전공/Database

[이론] 관계 데이터 연산

으녜 2022. 3. 13. 20:21
728x90
※ 관계 데이터 연산?

관계 데이터베이스 구조에서 사용되는 연산으로, 크게 관계 대수와 관계 해석 두 가지 종류가 있다.

 

1. 관계 대수(Relational Algebra)

: 릴레이션에서 사용자가 원하는 결과를 얻기 위해 연산자를 표현하는 방법으로, 결과를 얻기 위한 절차를 표현하기 때문에 절차적 언어라고 한다.

순수 관계 연산자 SELECT, PROJECT, JOIN, DIVISION
일반 집합 연산자 합집합, 교집합, 차집합, 카티션 프로덕트

 

 

1 ) SELECT( σ)

  • 릴레이션에서 조건을 만족하는 수평적 부분 집합(튜플)을 구하기 위한 연산
  • 연산 기호는 시그마(σ)이다.

Ex 1 ) 학생 테이블에서 점수가 80점 이상에 해당하는 튜플들을 추출해라.

σ (점수>=80)(학생)

Ex 2 ) 학생 테이블에서 학년이 '1'에 해당하는 튜플들을 추출해라.

σ (학년=1)(학생)

2) PROJECT(π)

  • 릴레이션에서 수직적 부분 집합(속성의 값)을 구하는 연산으로 원하는 속성만 추출하기 위한 연산
  • 연산 기호는 파이(π)를 이용한다.

Ex 1) 학생 테이블에서 학번과 이름 속성을 추출해라.

π학번,이름 (학생)

Ex 2) 학생 테이블에서 학년이 '1'학년인 학생들의 이름과 전공 속성을 추출해라

π이름,전공(σ (학년=1)(학생))

3 ) JOIN(⋈)

  • 두 테이블로부터 조건에 맞는 관련된 튜플들을 하나의 튜플로 결합하여 하나의 테이블로 만드는 연산
  • 동일 조인, 자연 조인, 외부 조인, 세타 조인 등이 있다.
  • 기호는 ⋈를 이용한다.

ⓐ 동일 조인

: 가장 기본이 되는 조인으로 관계 연산 중 '=' 연산자만을 이용하여 조건을 표현하며, 두 테이블의 모든 속성을 합한 하나의 테이블 구조로 만들어진다. (중복 속성도 모두 표현)

Ex 1) [학생] 테이블과 [성적] 테이블에서 학번이 서로 동일한 튜플들을 이용하여 하나의 테이블로 만들어라.

학생⋈학번=학번 성적

=> 학생 테이블에서 학번이 '1532'인 이태순 학생은 성적 테이블에 동일한 학번이 없어 결과에 포함되지 않는다.

 

ⓑ 자연조인

: 동일 조인한 결과에서 중복되는 속성을 제거하여 표현한다.

위 동일 조인한 결과에서 '학번'이 중복되므로 하나를 제거하여 표현한다.

 

ⓒ 외부 조인

: 조인 시 두 테이블 간에 관련 없는, 즉 조건에 맞지 않는 튜플도 결과 테이블에 포함시켜 조인하는 방법으로 해당 자료가 없는 부분은 NULL 값이 된다. 

=> [학생]에 있는 학번이 '1532' 인 튜플은 [성적] 테이블에 동일 학번이 존재하지 않아 동일 조인과 자연 조인에서는 결과 테이블에 포함되지 않았다. 그러나 외부 조인에서는 조건에 맞지 않는 경우도 결과 테이블에 포함되며, 해당 자료가 없는 경우 NULL 값이 된다.

 

ⓓ 세타 조인

: '=' 외의 연산자를 이용해 조건 수식을 표현하여 조인하는 연산으로, 동일 조인과 같이 두 테이블의 모든 속성을 합한 하나의 테이블 구조로 만들어진다.

Ex 1 ) X 테이블의 C 속성 값이 Y 테이블의 E 속성 값보다 큰 튜플들을 조인해라.

=> 위 X, Y 테이블에서 첫 번째 C 속성 값인 70을 기준으로 E 속성 값보다 큰 경우는 두 번째 튜플은 E값이 65인 경우이다. 같은 방법으로 X 테이블에서 두 번째 C 속성 값 60과 E 속성 값을, 세 번째 C 속성 값 95와 E 속성 값을 각각 비교하여 큰 튜플들만 조인하면 위와 같다.

 

 

4 ) DIVISION(÷)

: A, B 두 테이블에 대해 'A DIVISION B'는 B 테이블의 조건을 만족하는 튜플들을 테이블 A에서 추출하는 연산이다.

  • 연산에 사용된 속성은 결과에서 제외된다.
  • 연산 기호는(÷) 를 이용한다.

Ex 1 ) [학생] 테이블의 '수강과목'에서 [과목] 테이블의 '과목명' 속성 값을 모두 가진 경우에 해당하는 '학생' 테이블의 '성명' 속성 값을 추출해라

학생(수강과목명÷과목명) 과목

 

 

5) 일반 집합 연산자

ⓐ 합집합(∪)

=> X 테이블의 속성 값과 Y 테이블의 속성 값을 합하여 모두 표현하되, 중복되는 속성은 한 번만 표현한다.

 

ⓑ 교집합(∩)

=> X 테이블의 속성 값과 Y 테이블의 속성 값이 같은 속성 값만 표현한다.

 

ⓒ 차집합(-)

ⓓ 카티션 프로덕트(x)

=> 두 테이블의 속성 값을 모두 대응시켜 모든 경우를 표현한다.

 

 

2. 관계 해석

: 릴레이션에서 결과를 얻기 위한 과정을 표현하는 것으로 연산자 없이 정의하는 방법을 이용하는 비절차적 언어

  • 튜플 관계 해석과 도메인 관계 해석이 있다.
  • 표기 형식 : {결과값 | 조건}

Ex 1) '학점' 테이블에서 수강번호가 'B123'이고, 점수가 80 이상인 학생의 이름을 구해라.

{학점.이름 | 학점 ∧ 학점.수강번호='B123'   학점.점수 ≥ 80}

 

728x90