관계형 대수

개요

관계형 대수는 관계를 엮을 때 사용하는 각종 연산자를 말한다.
이 논리와 연산을 기본으로 하여 DB의 각종 연산들이 생기게 됐다.
실질 구현체는 집합 연산, 조인을 참조.

테이블들을 엮을 때 생성하는 절차적 언어 문법이라고도 표현한다.
Pasted image 20241109121709.png
이런식으로도 분류할 수 있다.
여기 있는 기호가 이전에 cs 문제에서 나온 적이 있어서 조금은 알 필요가 있다고 생각해 올린다.

Pasted image 20241109120500.png
대표적으로는 다음의 것들이 있다.
테이블을 위아래로 붙이거나, 옆으로 붙이거나, 겹치는 부분은 없애거나, 등등의 작업들을 할 수 있다.
join이 가장 대표적인 관계 연산자이다.

여기에서 또 세부적으로 나누자면 일반집합연산자와 순수관계연산자가 있다.
일반집합연산자는 아래 4개를 말하며, 말 그대로 집합에 대해서 일어나는 연산들이다.
순수관계연산자는 한 테이블 내에서 사용되는 것들을 주로 이야기한다.

union 연산

합집합을 구한다.
실제 sql에서도 집합 연산#UNION이란 이름으로 만들어졌다.
교집합에서 발생하는 중복을 제거하는 연산을 하기에 어느 정도의 수행 작업이 들어간다.
또한 중복을 제거한 뒤에는 정렬도 해준다.

union all 이란 것도 있는데, 이것은 중복을 제거하지 않는 합집합 작업이라 정렬 작업도 일어나지 않는다.
그렇기에 어차피 union을 해도 이것과 결과가 같다면 이쪽이 속도는 더 빠르다.

intersection 연산

교집합을 구한다.
집합 연산#INTERSECT로 구현됐다.

difference 연산

말 그대로 차집합이다.
집합 연산#EXCEPT(MINUS)로 구현됐다.

product 연산

이건 카테시안 곱을 말한다.
즉, 집합들에 성립할 수 있는 모든 묶음을 구한다.
조인#cross join으로 구현됐다.

select 연산

여기서부터는 순수관계연산자이다.
말그대로 DML#SELECT를 하는데, 우리가 원하는 행들만 뽑는 행위를 말한다.
where 조건을 걸어서 꺼내는 행위.

project 연산

이건 원하는 열만 뽑는 행위이다.
그냥 select할 때 원하는 컬럼만 쓰면 된다..

natural join 연산

위의 일반집합연산자들은 기본적으로 테이블들을 위아래로 붙이는 작업이다.
즉 행이 늘어나게 된다.
이 조인은 행을 늘리는 것이 아닌 열을 늘리는 작업이다.
가장 흔히 쓰게 되는 조인이 이 구현체라고 볼 수 있다.
여기에도 다양한 기능들이 존재한다.

divide 연산

나눗셈 연산이다.
특정 집합을 어떤 값이 있는 집합과 아닌 집합으로 나누는 행위인데, 이건 sql문으로 구현되지 않았다.
결국 다른 것들로 다 구현할 수 있기 때문이다.

참고