[이론] 관계 데이터 연산
※ 관계 데이터 연산?
관계 데이터베이스 구조에서 사용되는 연산으로, 크게 관계 대수와 관계 해석 두 가지 종류가 있다.
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}