일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백준 알고리즘
- 그래프 탐색
- 파이썬
- 백준알고리즘
- javascript
- 스택
- 데이터베이스
- 문자열
- Python
- 백트래킹
- 그래프 이론
- 너비 우선 탐색
- 다익스트라
- 자바스크립트
- 브루트포스 알고리즘
- 프로그래머스
- SW Expert Academy
- 다이나믹 프로그래밍
- DFS
- 깊이우선탐색
- 오라클
- DP
- 브루트포스
- SWEA
- 구현
- 그리디 알고리즘
- 완전탐색
- 너비우선탐색
- oracle
- BFS
- Today
- Total
민규의 흔적
[오라클 DB] 관계 대수 연산자 - 순수 관계 연산자 본문
관계 대수 연산자
관계 대수 연산자는 크게 일반 집합 연산자와 순수 관계 연산자로 구분된다.
이 포스팅에선 순수 관계 연산자에 대해 알아보도록 하겠다.
순수 관계 연산자
연산자 | 기호 | 표현 | 의미 |
실렉션 | σ | σ조건(R) | 릴레이션 R에서 조건을 만족하는 튜플들을 반환 |
프로젝트 | π | π속성리스트(R) | 릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플들을 반환 |
조인 | ⋈ | R ⋈ S | 공통 속성을 이용해 릴레이션 R과 S의 튜플들을 연결하여 만든 새로운 튜플들을 반환 |
디비전 | ÷ | R ÷ S | 릴레이션 R의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들을 반환 |
실렉션(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) 등
세타 조인
조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 튜플만 반환한다.
형식
𝜽(세타 조인의 조건)은 비교 연산자 (>, ≥, <, ≤, =, ≠) 를 의미
연산 결과
두 릴레이션 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 |
왼쪽 외부 조인과 오른쪽 외부 조인 결과 릴레이션의 각 튜플들을 모두 합친 후, 중복되는 튜플들을 삭제하면 결과 릴레이션이 도출된다.
'데이터베이스' 카테고리의 다른 글
[오라클 DB] SQL 개요 (0) | 2023.10.18 |
---|---|
[오라클 DB] 질의에 대한 관계 대수식 표현 예제 (0) | 2023.10.18 |
[오라클 DB] 관계 대수 연산자 - 일반 집합 연산자 (0) | 2023.10.18 |
[오라클 DB] 관계 데이터 모델과 관계 대수의 기본 개념 (0) | 2023.10.18 |
[오라클 DB] 무결성 제약조건 (도메인, 엔티티, 참조 무결성 제약조건) (0) | 2023.10.18 |