이번 포스팅에서는 Relational Algebra에 대해서 알아본다.
앞선 포스팅에서 배웠던 내용을 다시 한 번 정리해본다.
Relation이란? 2차원 데이터의 집합이다.
Relational Data Model에서는 3가지를 포함한다고 배웠었다.
Data Structure, Data Integrity, Data Manipulation이다.
Data Structure란 데이터를 어떻게 구성하는지에 대한 것이다, Data Integrity란 비즈니스 룰에 따라 데이터의 무결성을 어떻게 유지하는 것에 대한 것이다. Data Manipulation이란 데이터를 어떻게 조작하는지에 대한 것이다.
Data Manipulation에 대한 내용을 지금 포스팅에서 배워본다.
Relational Argebra란 테이블에서 데이터를 검색하는데 사용되는 작업의 모음이다.
목차
1. SELECT Operation
2. PROJECT Operation
3. Mathematical Set Operation
4. Cartesian Product Operation
5. JOIN Operation
1. SELECT Operation
선택조건을 만족하는 관계에서 튜플의 하위집합을 선택하는데 사용된다.
Select Condition이란 참 또는 거짓 결과를 가진 표현이다.
Selection Condition은 각 튜플에 적용된다. 표현식의 결과가 참이면 튜플이 선택되어 결과 관계에 나타난다.
예를 들어 알아보자.
위의 그림과 같이 Salary가 50000 초과인 튜플들만 결과 테이블에 나오게 된다. 이때, 기호를 시그마라고 읽는 것이 아니라 Select라고 읽는 것에 주의하자.
Selection condition은 <attribute name> <comparison operator> <constant value> 순으로 표현한다.
<comparison operator>에는 {=,≠,<,>,≤,≥} 다음과 같은 연산자가 들어갈 수 있다.
추가적인 예시들을 알아보자.
Salary보다 Bonus가 큰 튜플들을 선택한다.
Dept_Name이 Accounting인 튜플들을 선택한다.
Dept_Name이 Marketing이고 Salary가 45000초과인 튜플을 선택한다. 두 개의 조건이 다 맞아야 가져온다.
Dept_Name이 Marketing이거나 Salary가 45000초과인 튜플을 선택한다. 두 개의 조건 중 하나라도 맞으면 가져온다.
다음과 같이 부분집합으로 표현할 수 있다.
2. PROJECT Operation
PROJECT Operation은 테이블에서 특정 열을 선택하는데 사용된다.
다음과 같이 사용된다.
프로젝트 Operation은 중복을 제거하고 보여준다.
Select, Project Operation을 같이 사용하는 경우에 대해서 알아보자.
Select Operation을 사용하고 그 후 Project Operation을 사용한 경우이다.
중첩된 Operation은 중간 관계를 갖는 일련의 작업으로 나눌 수 있다.
예를 들어 다음과 같이 나눈다.
3. Mathematical Set Operations
Set은 아이템의 집합이다. 예를 들어 {1, 2, 3}과 같이 표현한다.
집합의 특성으로는 순서가 없다. Ex) {1,2,3} = {3,2,1}
또 한가지의 특성으로는 중복을 포함하지 않는다. Ex) {1,2,3,3} = {1,2,3}
집합의 수학적 연산자들에는 다음과 같은 것들이 있다.
Union(합집합), Intersection(교집합), Difference(차집합)이다.
Union 예시는 다음과 같다. {1,2,3} U {3,4,5}={1,2,3,4,5}
Intersection 예시는 다음과 같다. {1,2,3} ∩ {3,4,5}={3}
Difference의 예시는 다음과 같다. {1,2,3} − {3,4,5}={1,2}
쉬운 이해를 위해 예시를 통해 알아보자.
위의 그림은 Union의 예시이다.
위의 그림은 Intersection의 예시이다.
위의 그림은 Difference의 예시이다. Difference에서 주의할 점은 R-S, S-R은 다르다는 점이다. 아래 그림을 통해 확인하자.
결과가 다른 모습을 확인할 수 있다.
또한, 위와 같은 그림에서 알 수 있듯, 컬럼이 다른데 Union을 시도하고자 한다면 유효하지 않는 결과가 나오게 된다.
4. Cartesian Product Operation
Cartesian Product란 Q의 모든 속성은 R의 모든 속성과 S의 모든 속성으로 구성된다는 것이다. Q의 각 튜플은 R, S 튜플의 조합으로 구성된다.
위의 그림은 Cartesian Product의 예시이다.
Cartesian Product, Select Operation을 같이 사용할 수도 있다.
5. JOIN Operation
EQUIJOIN
Cartesian Product, Select Operation을 같이 사용한 것은 JOIN Operation과 같다.
JOIN Operation에서 Q의 속성은 R의 모든 속성과 S의 모든 속성으로 이루어지고 Q의 각 튜플은 R, S 튜플의 조합으로 이루어지고, 조합이 결합조건을 만족하는 곳이라면 어디든 있다.
JOIN Operation의 예시에 대해 알아본다.
JOIN Operation을 사용할 때 같은 도메인을 가져야 한다는 건 데이터 타입이 같아야 한다는 것을 의미한다. 예를 들어, 학번이 60111111 과 같은 값은 숫자이지만 텍스트로 들어간다, 덧셈 뺄셈을 하는 것이 아니기 때문이다.
만약, 다음과 같은 테이블 구조에서
연봉 보다 보너스를 많이 받는 사람을 알기 위해선 어떻게 알아야할까? 연봉과 보너스 데이터는 각각 다른 테이블에 존재하고 두 개 이상의 테이블에 있는 정보를 알기 위해선 JOIN Operation을 사용해서 알아야 한다. 지금까지 사용한 JOIN Operation은 EQUIJOIN이다. JOIN Operation의 종류에는 여러가지가 있다. 추가적으로 NATURAL JOIN, OUTER JOIN이다.
NATURAL JOIN
Natural join이란 EQUIJOIN인데 특별한 것이라고 이해한다. EQUIJOIN과 다르게 중복된 속성을 제거하는데 이때 조인 속성이 같은이름을 가져야 한다는 것인데 이게 무슨뜻일까? 예시를 통해 알아본다.
기존 EQUIJOIN은 다음과 같이 동작하였다.
OPID, PID의 이름이 달라도 JOIN이 가능했지만 NATURAL JOIN에서는 OPID, PID가 같은 이름을 가져야 한다. 즉, 겹치는 컬럼이 있어야 NATURAL JOIN이 가능하다.
예를 들어 알아보자.
기존의 Order 테이블에서 OPID컬럼 이름을 PID로 바꾸고 NATURAL JOIN이 가능하기 때문에 *(에스테리스크) 표시로 NATURAL JOIN을 진행한다. 이렇게 되면 기존의 EQUIJOIN에서 중복된 컬럼을 제거하고 결과 테이블을 볼 수 있다.
추가적인 NATURAL JOIN의 예시이다.
OUTER JOIN Operation
LEFT OUTER JOIN은 S에 결합조건을 만족하는 튜플이 있을 경우 두 튜플을 결합한다. 그렇지 않으면 R의 튜플과 S의 속성에 대한 null값을 결합한다. 이게 무슨 뜻일까?
마찬가지로 예시를 통해 알아보자.
다음과 같이 매칭이 안될 경우 InstructorName을 null로 채우는 것이다. Project Operation을 사용하여 CID, Titel, InstrctorName을 표시하였지만 만약 CRID컬럼도 표시하였다면 모두 null값으로 채워졌을 것이다.
이러한 Outer Join은 언제 사용할까?
예를 들어, 강좌는 만들어졌는데 강사는 배정이 안됐을 경우, 강사가 배정이 됐뜬 안됐든 우리가 디자인해서 보유하고 있는 과목을 보고싶을 때 사용한다.
Right Outer Join도 위치만 다를 뿐 Left Outer Join과 유사하게 작동한다.
이번 포스팅에서는 Relational Algebra에 대해서 알아보았다. 본격적인 SQL에 들어가기에 앞서 알고가야 하는 개념들이였다. 프로젝트를 진행하며 JPA의 로그들을 찍어보면 수 많은 OUTER JOIN을 만날 수 있었는데 명확히 무엇인지 알지 못한채 넘어가곤 했었다. 특히나 JPA를 사용할 때 마주치는 N+1문제에서 FETCH JOIN을 사용해 해결하곤 했었는데 명확히 알지 못했던 OUTER JOIN에 대해 정리하며 배워갈 수 있었다.

'Dev > Database' 카테고리의 다른 글
[Database] Database Index에 대한 고찰 (0) | 2022.08.13 |
---|---|
[Database] 6-2. Introduction to SQL (0) | 2022.02.26 |
[Database] 5. Physical Database Design (0) | 2022.02.25 |
[Database] 4-2. Logical Database Design (0) | 2022.01.30 |
[Database] 4-1. Logical Database Design (0) | 2022.01.26 |