이번 시간에는 SQL 쿼리문을 작성하는 데에 있어 필요한 내용 중 하나인 '관계 대수'를 알아보려고 합니다~
우선 관계 대수에서 사용되는 연산자는 다음과 같습니다.
아래의 연산자를 차근차근 알아보겠습니다~
① 합집합 (∪)
② 교집합 (∩)
③ 차집합 (-)
④ 카티션 곱 (×)
⑤ 셀렉션 (σ)
⑥ 프로젝션 (π)
⑦ 조인 (⋈)
⑧ 자연 조인 (*)
⑨ 세미 조인 (⟕, ⟖, ⟗)
⑩ 디비전 (÷)
1. 합집합 (∪)
- 중고등학교 수학 개념 '합집합'을 떠올리셔도 무방합니다. (교집합, 차집합도 포함)
- 테이블의 차수(Attribute의 수)가 서로 같아야 되고 도메인이 같아야 됩니다. (교집합, 차집합도 포함)
- 2개의 테이블에 있는 튜플(데이터 행)을 서로 결합한 다음 중복을 없애는 연산자입니다.
2. 교집합 (∩)
- 2개의 테이블을 비교했을 때 서로 같은 튜플만 남겨 놓는 연산자입니다. 차수가 2개 이상일 때는 2개의 데이터가 완전히 같아야 결과로 남습니다.
3. 차집합 (-)
- 왼쪽 테이블 내의 튜플들을 기준으로 오른쪽 테이블 내에 있는 튜플들을 제거하는 연산자입니다. 차수가 2개 이상일 때는 2개의 데이터가 완전히 같아야 제거됩니다.
4. 카티션 곱 (×)
- 2개의 테이블을 별도의 조건 없이 서로 연결시키는 연산자입니다. '2개의 테이블을 무작정 결합한다'라고 생각하셔도 되겠습니다 ㅋㅋ
- 별도의 조건이 없으므로 온갖 튜블들을 서로 연결시킨 결과가 나옵니다.
5. 셀렉션 (σ)
- 조건을 명시한 다음, 테이블 내에서 조건을 만족하는 튜플들만 남겨 놓는 연산자입니다.
- 조건문에는 6개의 비교 연산자(=, ≠, >, <, ≥, ≤)가 들어가야 되고, 3개의 논리 연산자(AND, OR, NOT)로 여러 개의 조건을 제시하는 것도 가능합니다. (NOT 제외)
- 위의 사진으로 보았을 때, 국가가 영국에 속해는 비행기는 허리케인과 타이푼 이므로 결과는 오른쪽과 같이 나옵니다.
6. 프로젝션 (π)
- 테이블로부터 남겨놓을 Attribute 명을 명시하면, 그 Attribute 내에 있는 데이터들만 결과로 나옵니다. 데이터가 서로 중복될 경우, 중복되는 데이터는 제거됩니다.
- 위의 사진으로 보았을 때, Attribute 명을 '담당악기'로 명시하였으므로 결과는 오른쪽과 같이 나옵니다. 중복되는 '기타' 값은 삭제됩니다.
7. 조인 (⋈)
- 조건을 명시한 다음 2개의 테이블을 서로 연결시켜 합치는 연산자입니다.
- 조건을 명시한다는 점에서 '카티션 곱' 하고는 다릅니다.
- 셀렉션과 마찬가지로, 조건문에는 6개의 비교 연산자가 들어가야 되고, 3개의 논리 연산자로 여러 개의 조건을 제시하는 것도 가능합니다.
- 위의 이미지로 설명해보면, 왼쪽 테이블 내의 튜플들을 기준으로 오른쪽 테이블 내의 튜플들과 비교합니다. 비교해서 '선호국가'와 '국가'가 서로 같다면, 그 2개의 튜플을 서로 연결해서 결과로 제시합니다.
8. 자연 조인 (*)
- 기능은 7번의 '조인'과 비슷하지만, 2개의 Attribute 명만 명시할 수 있다는 점과 오른쪽 테이블에 있는 Attribute를 제거해서 결과로 제시한다는 점이 다릅니다.
- 2개의 테이블이 서로 같은 Attribute 명을 가지고 있다면, 왠만해선 Attribute 명을 명시할 필요가 없습니다.
9. 세미 조인 (⟕, ⟖, ⟗)
- 세미 조인 역시 7번의 '조인'과 비슷하지만, 한 테이블을 기준으로 비교했을 때, 메치되지 않는 튜플을 배제하지 않고 NULL값으로 남겨 서 연결시킨 다음 결과로 제시한다는 점이 다릅니다.
- 세미 조인은 Left Outer Join, Right Outer Join, Full Outer Join, 이렇게 3가지로 분류됩니다.
- 넷마블 게임 중 'High-Low 게임' 이라고 아시나요??? 왼쪽에서부터 순서대로 High(↑), Low(↓), Swing(↕) 이라고 생각하셔도 무방할 것 같습니다 ㅋㅋㅋ 자세한 것은 다음으로 넘어가서 살펴보죠~
(1) left outer join
- 왼쪽 테이블 내의 튜플들을 기준으로 비교했을 때, 메치되지 않는 튜플을 배제하지 않고 NULL값으로 남겨서 연결시킨 다음 결과로 제시하는 연산자입니다.
- 'High-Low 게임'에서 High(↑)에 해당합니다.
(2) right outer join
- 'Left Outer Join' 연산자와 비슷하지만, 오른쪽 테이블을 기준으로 한다는 점이 다릅니다.
- 오른쪽 테이블 내의 튜플들을 기준으로 비교했을 때, 메치되지 않는 튜플을 배제하지 않고 NULL값으로 남겨서 연결시킨 다음 결과로 제시하는 연산자입니다.
- 'High-Low 게임'에서 Low(↓)에 해당합니다.
(3) full outer join
- 위의 'Left Outer Join'과 'Right Outer Join'의 오퍼레이션을 합친 것입니다. 다시 말해, 'Left Outer Join ∪ Right Outer Join' 이라고 보아도 무방합니다.
- 구체적으로 말하자면, 왼쪽 테이블 내의 튜플들을 기준으로 비교했을 때, 메치되지 않는 튜플을 배제하지 않고 NULL값으로 남겨서 연결시킨 다음 결과로 제시합니다. 다음, 오른쪽 테이블 내의 튜플들을 기준으로 비교했을 때, 메치되지 않는 튜플을 배제하지 않고 NULL값으로 남겨서 연결시킨 다음 결과로 제시합니다. 여기서, 중복되는 튜플은 배제합니다.
- 'High-Low 게임'에서 Swing(↕)에 해당합니다.
10. 디비전 (÷)
- 왼쪽 테이블을 기준으로 보았을 때, 오른쪽 테이블에 있는 값들을 모두 가지고 있는 튜플들만 남겨놓는 연산자입니다.
- 소노다 우미는 아이돌부와 궁도부에 모두 속해 있는 설정이므로 결과 값은 위와 같이 나옵니다.
여기까지, 관계 대수에 대한 설명이었는데요~
이해가 되셨는지 모르겠습니다 ㅎㅎ 최대한 자세하게 설명해보려고 노력했는데 말이죠 ㅎㅎㅎ
다음 시간에는 SQL 쿼리문 중 가장 중요한 SELECT 문의 문법을 알아보는 시간을 가져보도록 하겠습니다~
'IT강의 > 데이터베이스' 카테고리의 다른 글
2018년도 정보처리기사 실기 2회 문제풀이 및 해설 - 5. SQL 쿼리문 (0) | 2020.12.27 |
---|---|
2018년도 정보처리기사 실기 2회 문제풀이 및 해설 - 4. 데이터베이스 이론 (0) | 2020.12.27 |
DB 연동 및 SQL 응용 - JDBC (0) | 2020.12.26 |
SQL - 데이터 조작어 (0) | 2020.12.26 |
SQL - SELECT문 (0) | 2020.12.26 |