민규의 흔적

[오라클 DB] 관계 대수 연산자 - 순수 관계 연산자 본문

데이터베이스

[오라클 DB] 관계 대수 연산자 - 순수 관계 연산자

민규링 2023. 10. 18. 22:02

관계 대수 연산자

 

 

관계 대수 연산자는 크게 일반 집합 연산자 순수 관계 연산자로 구분된다.

 

이 포스팅에선 순수 관계 연산자에 대해 알아보도록 하겠다.

 

 


 

순수 관계 연산자

 

연산자 기호 표현 의미
실렉션 σ σ조건(R) 릴레이션 R에서 조건을 만족하는 튜플들을 반환
프로젝트 π π속성리스트(R) 릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플들을 반환
조인 R ⋈ S 공통 속성을 이용해 릴레이션 R과 S의 튜플들을 연결하여 만든 새로운 튜플들을 반환
디비전 ÷ R ÷ S 릴레이션 R의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들을 반환

 

두 릴레이션 R과 S에 대해 순수 관계 연산자를 이용한 연산 결과

 


 

실렉션(selection) 연산자

 

한 릴레이션에서 실렉션 조건을 만족하는 튜플들의 부분 집합을 구하는 연산자.

 

형식

 

σ (sigma, 시그마) 기호 사용

 

실렉션 연산자 포맷

 

연산 결과 

 

결과 릴레이션의 차수는 입력 릴레이션의 차수와 같음
-> 한 튜플을 뽑은 결과 릴레이션이니 차수는 같다.

결과 릴레이션의 카디널리티는 항상 원래 릴레이션의 카디널리티보다 작거나 같음
-> 모든 튜플을 실렉트하면 카디날리티는 같고 특정 조건으로 실렉트하면 작다.

 

 

실렉션 조건 (predicate)

 

릴레이션 애트리뷰트와 상수, = , <>, <=, <, >=, > 의 비교 연산자
- < 애트리뷰트> 비교연산자 <상수> , <애트리뷰트>비교연산자<애트리뷰트>
- 예) AGE >= 3 , EMPNAME = MANAGER 등

실렉션 조건은 AND, OR, NOT 등의 논리 연산자를 포함
- <조건>AND<조건> , <조건>OR<조건> ,  NOT<조건>
- 예) AGE >= 3 AND DNO = 1 , DNO = 1 OR DNO = 3 등

 

실렉션 예시 1

 

질의 : EMPLOYEE 릴레이션에서 3번 부서에 소속된 사원들을 검색하시오.

 

EMPLOYEE 릴레이션

EMPNO EMPNAME TITLE MANAGER SALARY DNO
4377 이성래 사장 ^ 5000000 2
3426 박영권 과장 4377 3000000 1
3011 이수민 부장 4377 4000000 3
3427 최종철 사원 3011 1500000 3
1003 조민희 과장 4377 3000000 2
2106 김창섭 대리 1003 2500000 2
1365 김상원 사원 3426 1500000 1

 

 

위 질의는 말 그대로 EMPLOYEE 릴레이션에서, DNO가 3인 사원을 검색하여 결과 릴레이션을 뽑아야 함이 목적이다.

질의를 관계 대수 연산자 형태로 표현하면 다음과 같다.

 

 

EMPLOYEE 릴레이션에서 DNO가 3인 사원은 이수민, 최종철로 연산 결과 릴레이션은 다음과 같이 도출되어야 한다.

 

결과 릴레이션

EMPNO EMPNAME TITLE MANAGER SALARY DNO
3011 이수민 부장 4377 4000000 3
3427 최종철 사원 3011 1500000 3

 

 

 

실렉션 예시 2

 

질의 : 고객 릴레이션에서 등급이 gold이고, 적립금이 2000 이상인 튜플을 검색하시오.

 

고객 릴레이션

고객아이디 고객이름 나이 등급 직업 적립금
apple 김현준 20 gold 학생 1000
banana 정소화 25 vip 간호사 2500
carrot 원유선 28 gold 교사 4500
orange 정지형 22 silver 학생 0

 

위 질의는 고객 릴레이션에서 등급이 gold 이면서(AND) 적립금이 2000 이상인 모든 고객의 튜플들로 이루어진 결과 릴레이션을 도출해야 한다는 뜻이다.

질의를 관계 대수 연산자로 표현하면 다음과 같다.

 

 

고객 릴레이션에서 등급이 gold인 고객인 김현준, 원유선이 존재하지만, 김현준의 적립금은 2000 미만이기에 원유선 고객의 튜플이 결과 릴레이션으로 도출되어야 한다.

 

결과 릴레이션

고객아이디 고객이름 나이 등급 직업 적립금
carrot 원유선 28 gold 교사 4500

 

 

참고로 질의문이 달라도 같은 결과 릴레이션을 도출할 수 있다. 다음과 같은 경우가 그 예이다.

 

위 질의문과 같은 결과 릴레이션을 도출한다.

 

결과는 같게 나오니 아무 질의문을 선택해도 상관없을것 같지만, 중간에 도출되는 결과 릴레이션에 따라 속도 면에서 차이가 존재한다.

 

 

 


 

프로젝션(projection) 연산자

 

한 릴레이션의 애트리뷰트들의 부분 집합으로 구성된 튜플을 구하는 연산자.

 

형식

 

π (pi, 파이) 기호 사용

 

파이 연산자 포맷

 

연산 결과 

 

생성되는 릴레이션은 <애트리뷰트 리스트> 에 명시된 애트리뷰트들만 가짐

실렉션의 결과 릴레이션에는 중복 튜플이 존재할 수 없지만, 프로젝션 연산의 결과 릴레이션에는 중복된 튜플이 존재할 수 있다.
-> 릴레이션의 특성 만족을 위해 중복을 제거해야 한다.

 

 

프로젝션 예시 1

 

질의 : 모든 사원들의 직급을 검색하시오

 

EMPLOYEE 릴레이션

EMPNO EMPNAME TITLE MANAGER SALARY DNO
4377 이성래 사장 ^ 5000000 2
3426 박영권 과장 4377 3000000 1
3011 이수민 부장 4377 4000000 3
3427 최종철 사원 3011 1500000 3
1003 조민희 과장 4377 3000000 2
2106 김창섭 대리 1003 2500000 2
1365 김상원 사원 3426 1500000 1

 

위 질의는 모든 사원들의 직급(TITLE) 애트리뷰트만을 갖는 튜플들을 뽑아 결과 릴레이션으로 도출하라는 의미이다.

질의를 관계 대수 연산자로 표현하면 다음과 같다.

 

<애트리뷰트 리스트>에 TITLE 애트리뷰트를 명시하여 TITLE 애트리뷰트만을 검색하겠다는 의사를 표현할 수 있다.

 

위 조건대로 결과 릴레이션을 뽑으면 다음과 같다.

 

TITLE
사장
과장
부장
사원
과장
대리
사원

 

결과 릴레이션을 보니 과장사원 직급이 중복됨을 알 수 있다.

릴레이션의 특성을 만족하기 위해 중복을 제거하여 최종 결과 릴레이션을 도출한다.

 

TITLE
사장
과장
부장
사원
대리

 

 

프로젝션 예시 2

 

질의 : 고객 릴레이션에서 고객이름, 등급, 적립금을 검색하시오.

 

고객 릴레이션

고객아이디 고객이름 나이 등급 직업 적립금
apple 김현준 20 gold 학생 1000
banana 정소화 25 vip 간호사 2500
carrot 원유선 28 gold 교사 4500
orange 정지형 22 silver 학생 0

 

위 질의는 고객이름, 등급, 적립금 모든 튜플에 대해 고객이름, 등급, 적립금 애트리뷰트로만 구성되도록 하여 결과 릴레이션을 도출하라는 의미이다.

질의를 관계 대수 연산자로 표현하면 다음과 같다.

 

 

<애트리뷰트 리스트>에 고객이름, 등급, 적립금 애트리뷰트를 나열하여 해당 세 애트리뷰트만을 검색하겠다는 의사를 표현할 수 있다.

 

위 조건대로 결과 릴레이션을 뽑으면 다음과 같다.

 

고객이름 등급 적립금
김현준 gold 1000
정소화 vip 2500
원유선 gold 4500
정지형 silver 0

 

중복되는 튜플이 없으므로 해당 릴레이션이 최종 결과 릴레이션이다.

 

 

 

실렉션과 프로젝션 연산자는 단항 연산자이다.(릴레이션 하나를 입력값으로 가짐)

 

 


 

조인 연산자

 

두 개의 릴레이션으로부터 공통 속성을 이용해 연관된 튜플들을 결합하는 연산자이다.

두 개 이상의 릴레이션들의 관계를 다루는 데에서 매우 중요한 연산자이다.

 

형식

 

 기호 사용

 

조인 연산자 포맷

 

조인 연산자 종류

 

세타 조인(theta join)

동등 조인(equi join)

자연 조인(natural join)

외부 조인(outer join)

세미 조인(semi join) 등

 

 

 

세타 조인

 

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

 

 

형식

 

𝜽(세타 조인의 조건)은 비교 연산자 (>, ≥, <, ≤, =, ≠) 를 의미

 

A𝜽B => A>B, A<B, A=B 등 𝜽의 위치에 비교 연산자를 삽입할 수 있다.

 

 

연산 결과

두 릴레이션 R(A1, A2, ..., An)과 S(B1, B2, ..., Bm)의 세타 조인의 결과는
차수가 n+m이고, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며,
조인 조건을 만족하는 투플들로 이루어진 릴레이션

 

 

 

동등 조인

 

세타 조인 중에서 비교 연산자가 = 인 조인.

 

 

형식

 

동등 조인 연산자 포맷. 세타 조인의 포맷에서 비교 연산자 𝜽 가 동등( = ) 연산자.

 

동등 조인 예시

 

질의 : EMPLOYEE 릴레이션과 DEPARTMENT 릴레이션을 동등 조인하시오.

 

EMPLOYEE 릴레이션

EMPNO EMPNAME DNO
4377 이성래 2
3426 박영권 1
3011 이수민 3
1003 조민희 2
2106 김창섭 2

 

DEPARTMENT 릴레이션

DEPTNO DEPTNAME
1 영업
2 기획
3 개발
4 총무

 

질의를 관계 대수 연산자로 표현하면 다음과 같다.

 

 

 

조건에 명시되어 있듯, EMPLOYEE 릴레이션의 DNO 애트리뷰트의 값DEPARTMENT 릴레이션의 DEPTNO 릴레이션의 값이 같은 튜플끼리 조인한 결과는 다음과 같다.

 

EMPNO EMPNAME DNO DEPTNO DEPTNAME
4377 이성래 2 2 기획
3426 박영권 1 1 영업
3011 이수민 3 3 개발
1003 조민희 2 2 기획
2106 김창섭 2 2 기획

 

 

 

 

 

자연 조인

 

동등 조인의 결과 릴레이션에서 중복된 조인 애트리뷰트를 한 개 제외한 조인으로, 여러 가지 조인 연산자들 중에서 가장 자주 사용된다.

관계 데이터베이스에서 대부분의 질의는 실렉션, 프로젝션, 자연 조인으로 표현이 가능하다.

 

 

형식

 

 

 

 

동등 조인 예시

 

질의 : EMPLOYEE 릴레이션과 DEPARTMENT 릴레이션을 자연 조인하시오.

 

EMPLOYEE 릴레이션

EMPNO EMPNAME DNO
4377 이성래 2
3426 박영권 1
3011 이수민 3
1003 조민희 2
2106 김창섭 2

 

DEPARTMENT 릴레이션

DEPTNO DEPTNAME
1 영업
2 기획
3 개발
4 총무

 

질의를 관계 대수 연산자로 표현하면 다음과 같다.

 

 

 

두 릴레이션의 동등 조인 결과에서, 중복되는 애트리뷰트는 DNO와 DEPTNO이다.

해당 중복 애트리뷰트 중, 하나 제거한 조인 결과는 다음과 같다.

 

 

EMPNO EMPNAME DNO (혹은 DEPTNO) DEPTNAME
4377 이성래 2 기획
3426 박영권 1 영업
3011 이수민 3 개발
1003 조민희 2 기획
2106 김창섭 2 기획

 

 

 

 

 

디비전 연산자

 

 

형식

 

÷ 기호 사용

 

 

 

차수가 n+m인 릴레이션 R(A1, A2, ..., An, B1, B2, ..., Bm)과 차수가 m인 릴레이션 S(B1, B2, ..., Bm)의 디비전 R ÷ S의 연산 결과는 다음과 같다.

 

 

연산 결과

 

차수가 n이고, 릴레이션 S의 속성 B값과 릴레이션 속성 R의속성 B 값이 서로 동일하게 대응하는 릴레이션 R의 속성 A의 튜플들을 반환

 

릴레이션 S의 모든 튜플과 관련 있는 릴레이션 R의 튜플로 결과를 구성한다.

 

 

디비전 연산자 예시

 

주문 내역 릴레이션과 제품1, 2 릴레이션에 대해 각각 디비전 연산을 수행하려고 한다.

 

 

주문 내역 릴레이션

주문고객 제품이름 제조업체
apple 진짜우동 한빛식품
carrot 맛있는파이 마포과자
banana 그대로만두 한빛식품
apple 그대로만두 한빛식품
carrot 그대로만두 한빛식품

 

제품 1 릴레이션

제품이름
진짜우동
그대로만두

 

제품 2 릴레이션

제품이름 제조업체
그대로만두 한빛식품

 

 

Case 1. 주문내역 ÷ 제품 1

 

주문내역 릴레이션 중에서 제품이름이 '진짜우동', '그대로만두' 모두를 주문한 주문고객과 그 제품들의 제조업체를 검색하는 것과 의미가 같다.

 

결과 릴레이션

주문고객 제조업체
apple 한빛식품

 

 

 

 

 

Case 2. 주문내역 ÷ 제품 2

 

주문내역 릴레이션 중에서 제품이름이 '그대로만두'이고 제조업체가 '한빛식품'인 제품을 주문한 고객을 모두 검색하는 것과 의미가 같다.

 

결과 릴레이션

주문고객
banana
apple
carrot

 

 

 


 

추가된 관계 대수 연산자 - 외부 조인(Outer Join)

 

상대 릴레이션에서 대응되는 튜플을 갖지 못하는 튜플이나 조인 애트리뷰트에 널 값이 들어 있는 튜플들을 다루기 위해서 조인 연산을 확장한 조인이다.

즉, 자연 조인 연산에서 제외되는 모든 튜플을 결과 릴레이션에 포함시키는 조인이다.

두 릴레이션에서 대응되는 튜플들을 결합하면서, 대응되는 튜플을 갖지 않는 튜플과 조인 애트리뷰트에 널 값을 갖는 튜플도 결과에 포함시킨다.

 

외부 조인 종류

 

  • 왼쪽 외부 조인(left outer join) : 왼쪽 릴레이션(R)의 모든 튜플들을 결과에 포함
  • 오른쪽 외부 조인(right outer join) : 오른쪽 릴레이션(S)의 모든 튜플들을 결과에 포함
  • 완전 외부 조인(full outer join) : 양쪽 릴레이션(R과 S)의 모든 튜플들을 결과에 포함

 

 

 


왼쪽 외부 조인(left outer join)

 

릴레이션 R과 S의 왼쪽 외부 조인 연산은 R의 모든 튜플들을 결과에 포함시키고, 만일 릴레이션 S에 관련된 튜플이 없으면 결과 릴레이션에서 릴레이션 S의 애트리뷰트들은 널 값으로 채운다.

 

 

형식

⟕ 기호 사용

 

 

 

예를 들어보자.

 

R 릴레이션

A B C
a1 b1 c1
a2 b2 c2

 

S 릴레이션

C D E
c1 d1 e1
c3 d2 e2

 

 

R과 S의 자연조인 결과는 다음과 같다.

 

 

동등 조인 결과 릴레이션

A B C D E
a1 b1 c1 d1 e1

 

 

R과 S의 왼쪽 외부 조인 결과는 어떨까?

왼쪽 외부 조인은 R의 모든 튜플들을 결과에 일단 포함시키고, 만일 S에 관련된 튜플이 없다면 결과 릴레이션에서 널 값을 채우면 된다.

 

 

R⟕ S 결과 릴레이션

A B C D E
a1 b1 c1 d1 e1
a2 b2 c2 ^ ^

 

R 릴레이션의 2번째 튜플인 (a2, b2, c2) 튜플을 일단 결과 릴레이션에 포함시켰으나, C 애트리뷰트가 c2로 대응되는 S 릴레이션의 튜플이 존재하지 않기 때문에, 널 값으로 채워 결과 릴레이션을 완성한다.

 

 

 


 

오른쪽 외부 조인(right outer join)

 

릴레이션 R과 S의 오른쪽 외부 조인 연산은 S의 모든 튜플들을 결과에 포함시키고, 만일 릴레이션 R에 관련된 튜플이 없으면 결과 릴레이션에서 릴레이션 R의 애트리뷰트들은 널 값으로 채운다.

 

 

형식

​⟖  기호 사용

 

 

위 R, S 릴레이션의 오른쪽 외부 조인 R ​⟖ S의 결과는 다음과 같다.

 

 

R ​⟖ S 결과 릴레이션

A B C D E
a1 b1 c1 d1 e1
^ ^ c3 d2 e2

 

S 릴레이션의 2번째 튜플인 (c3, d2, e2)를 일단 결과 릴레이션에 포함하고, C 애트리뷰트의 값이 c3에 대응되는 R 릴레이션의 튜플이 존재하지 않으므로, 널 값으로 채워 결과 릴레이션을 완성한다.

 

 

 


 

완전 외부 조인(full outer join)

 

릴레이션 R과 S의 완전 외부 조인 연산은 R과 S의 모든 튜플들을 결과에 포함시키고 만일 상대 릴레이션에 관련된 튜플이 없으면 결과 릴레이션에서 상대 릴레이션의 애트리뷰트들은 널 값으로 채운다.

 

 

형식

  기호 사용

 

위 R, S 릴레이션의 완전 외부 조인 R  S의 결과는 다음과 같다.

 

A B C D E
a1 b1 c1 d1 e1
a2 b2 c2 ^ ^
^ ^ c3 d2 e2

 

왼쪽 외부 조인과 오른쪽 외부 조인 결과 릴레이션의 각 튜플들을 모두 합친 후, 중복되는 튜플들을 삭제하면 결과 릴레이션이 도출된다.