되자!백엔드개발자
[DB기초] 관계대수, Join의 종류, 디비전(division) 본문
조인 예시의 일부는 https://satisfactoryplace.tistory.com/201블로그를 참고 했다.
관계대수(relational algebra)
관계형DB에서 원하는 정보와 그 정보를 검색하는지에 대한 처리절차를 명시하는 절차적인 언어이다. 피연산자가 릴레이션, 결과도 릴레이션이다.
대표적으로 순수 관계 연산자와 일반 집합 연산자가 있다.
- 순수관계연산자 : 관계데이터베이스에 적용할 수 있도록 특별히 개발한 관계연산자이다. ex)select, Project, Join, Division
- 일반집합연산자 : 수학적 집합 이론에서 사용하는 연산자로 릴레이션연산에도 그대로 적용할 수 있다. ex)합집합, 교집합, 차집합
작성방법
- 단항연산자 : 연산자<조건>릴레이션
- 이항연산자: 릴레이션1 연산자<조건> 릴레이션2
관계대수 연산자
1. 셀렉션(selection)
릴레이션의 투플을 추출하기위한 연산자. 단항 연산자이다. *투플 : 행(row)를 뜻함
조건은 연산기호 ^(and), v(or), ㄱ(not)를 이용하여 복합조건 표시도 가능하다.
예제) 도서 중 8,000원 이하인 도서를 검색하시오
2. 프로젝션(projection)
릴레이션의 속성을 추출하기 위한 연산자. 단항연산자이다.
예제) 신간도서 안내를 위해 고객의(이름, 주소, 핸드폰)이 적힌 카탈로그 주소록을 만드시오.
3. 카티전 프로덕트(cartesian product, cross join)
두 릴레이션을 연결시켜 하나로 합칠 때 사용한다. 크로스 조인(cross join)이라고도 한다.
왼쪽 릴레이션을 table1, 오른쪽 릴레이션을 table2라고 할 때
table1의 각각의 투플은 table2의 모든 행과 결합되어있고 '결과 릴레이션의 속성 = table1의 속성 + table2의 속성'인 것을 확인할 수 있다.
따라서 결과 릴레이션의 차수(속성 개수)는 두 릴레이션의 차수의 합이고, 카디날리티(인스턴스 개수)는 두 릴레이션의 카디날리티의 곱이다.
예제) 고객 릴레이션과 주문 릴레이션의 카티전 프로덕트를 구하시오.
(결과는 일부 생략)
4. 조인(join)
관계형 DB는 중복 데이터를 피하기 위해 데이터를 쪼개 여러 테이블로 나눠서 저장한다. 그런데 원하는 결과를 도출하기 위해서는 여러 테이블을 조합할 필요가 있다. 예를들면 도서번호 1을 주문한 고객의 이름을 알고 싶으면 위의 주문 table과 고객table 두가지가 필요하다. 이를 위해 관계형 데이터베이스에서는 조인(join)연산자를 사용해 관련있는 컬럼 기준으로 행을 합쳐주는 연산이 존재한다.
- where절에서 공통 속성에 대해 조건을 달지 않으면 다대다 조인, 즉 카티전 프로덕트가 된다.
- 조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야한다.
- 조인 연산의 결과는 공통 속성의 속성 값이 동일한 투플만을 반환한다.
(용어가 이해 안되면 기초용어 글을 찾아보자)
Join의 종류
4.1. 세타조인(theta join, ⋈AΘB)
조인에 참여하는 두 릴레이션의 속성값을 비교하여 조건을 만족하는 투플만 반환한다.
T= R⋈(AΘB) S라는 식이 있다고 하자.
이는 R과 S 릴레이션을 조인하되, R의 속성 A와 S의 속성 B가 세타(Θ)관계가 성립하는 새로운 T릴레이션을 생성한다는 뜻이다. Θ에는 {=, ≠, ≤, ≥, <, >} 중 하나가 들어간다.
예제) T= R⋈(A>=B) S
Relation R
A | AA |
1 | 안녕 |
1 | 하세요 |
Relation S
B | BB |
1 | 반갑 |
3 | 습니다 |
R과 S를 조인하되, R의 속성 A가 S의 속성 B보다 크거나 같은 튜플을 가진 새로운 릴레이션을 생성한다는 뜻이다.
Relation T
A | AA | B | BB |
1 | 안녕 | 1 | 반갑 |
1 | 하세요 | 1 | 반갑 |
4.2. 동등조인(equi join, ⋈A=B)
세타조인에서 = 연산자를 사용한 조인을 뜻함. 보통 조인연산이라고 하면 동등조인을 지칭한다.
예제) 고객과 고객의 주문 사항을 모두 보이시오
(고객과 주문 릴레이션은 위에 있어서 생략)
4.3. 자연조인(natural join, ⋈N)
동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록 중복 속성을 하나만 남도록 제거한 결과를 반환한다.
동등조인(T = R⋈(A=A) S)을 출력하면 같은 속성인 A가 두번 출력되게 되니 하나를 없애주기 위해
T = R⋈N S 로 사용한다.
예제) 고객과 고객의 주문 사항을 모두 보여주되 같은 속성은 한 번만 표시하시오.
고객 ⋈ N(고객.고객번호=주문.고객번호 ) 주문
4.4. 외부조인(outer join)
자연조인 시 조인에 실패한 투플을 모두 보여주되, 값이 없는 대응 속성은 Null 값을 채워서 반환. 모든 속성을 보여주는 기준 릴레이션 위치에 따라 왼쪽(left, 오른쪽(right), 완전(full) 외부조인으로 나뉜다.
왼쪽 외부 조인(Left Outer Join; ⟕)
자연조인이 불가능한 왼쪽 릴레이션의 튜플들에 결과값의 나머지 애트리뷰트 부분에 NULL값을 주어 조인한다.
Relation R
A | AA |
1 | 안녕 |
2 | 하세요 |
Relation S
A | AAA |
1 | 반갑 |
3 | 습니다 |
T= R⟕S 일 때,
자연조인 불가능한 R의 튜플인 {2, 하세요}에 결과값에 부족한 애트리뷰트인 AAA에 NULL을 주어
{2, 하세요, NULL} 로 만들고 결과값에 포함시킨다.
Relation T
A | AA | AAA |
1 | 안녕 | 반갑 |
2 | 하세요 | NULL |
만약 자연조인이였으면 A = 1인 첫번째 행만 남았을 것이다.
4.5. 세미조인(semi join,⋉)
자연조인 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환하며, 기호에서 닫힌 쪽릴레이션의 투플만 반환한다.
예제) 고객 중 주문내역이 있는 고객의 정보만 보이시오
고객⋉ 주문
디비전(division, ÷)
R÷S는 S에 포함된 튜플을 모두 가지는 R의 튜플 중에, S에 포함된 속성을 제거하고 반환한다.
아래 예시에서 R의 속성은 {A, B} 이고 S의 속성은 {B}가 존재할 때결과릴레이션은 S의 속성 B와 동일한 속성을 가지논 튜플을 반환하되, 속성 B는 제외하고 반환된다.
'개발공부 > DB기초' 카테고리의 다른 글
[DB기초] DDL, DML, DCL의 정의 (0) | 2022.09.25 |
---|---|
[DB기초] 무결성 제약조건 (0) | 2022.09.14 |
[DB기초] MySQL과 Oracle에서의 짝수,홀수 (0) | 2022.09.13 |
[DB기초] 관계형 데이터베이스 용어 - 키(key) (0) | 2022.09.09 |
[DB기초] 관계형 데이터베이스 용어 - 스키마, 릴레이션, 관계 (0) | 2022.09.08 |