관계대수
Gravity DBA 이승연
관계대수는 테이블에서 튜플을 검색하기 위해 필요한 연산자들을 모은 것으로서, 모두 8개의 연산자로 구성된다. 이중 4개는 집합 연산자이고, 나머지 4개는 관계연산자 인데, 집합 연산자는 수학에서 사용되는 일반적인 집합 연산자로 , 합집합(union), 교집합(Intersection), 차집합(Difference), 카테시언 곱(Cartesian product)으로 구성된다. 집합 연산자는 테이블에만 적용 할 수 있는 검색 연산자로서 Selection, Projection, Join, Division으로 구성된다.
l 집합 연산자
합집합(union)
교집합(Intersection)
차집합(Difference)
카테시언 곱(Cartesian product)
l 관계 연산자
Selection
Projection
Join
Division
집합 연산자
합집합(union)
집합 A의 원소와 집합B의 원소를 모두 합한 전체를 A와B의 합집합이라 하며 A∪B 또는 A+B로 나타낸다. 즉, 원소 ⓧ가 A∪B에 속한다는 것은 ⓧ가 A,B 중의 적어도 한쪽에 속한다는 것이다.
교집합(Intersection)
집합 A의 와 집합 B의 양쪽에 공통으로 속해 있는 원소 전체의 집합을 A와 B의 교집합이라 하고, A∩B 로 나타낸다.
차집합(Difference)
집합 A와 집합 B를 생각할 때, 집합 A에 속하고 집합 B에는 속하지 않는 원소 집합을 집합 A에 대한 집합 B의 차집합이라 하고, A-B로 표시한다.
카테시언 곱(Cartesian product)
집합 A와 집합 B를 곱한 집합이고 A×B로 표시한다.
집합 A = {1,2,3,4}이 있고 집합 B = {3,4,5,6} 이 있을 때
합집합 A+B = {1,2,3,4,5,6}
교집합 A∩B = {3,4}
차집합 A-B = {1,2,3}
곱집합 A×B = {(1,3),(1,4),(1,5),(1,6),(2,3),(2,4),(2,5),(2,6),(3,3),(3,4),(3,5),(3,6),(4,3),(4,4) ,(4,5),(4,6)}이 되며, 이제 우리가 알고 있는 DATABASE의 TABLE과 T-SQL로 표현을 하여 보자.
A반 번호 |
1 |
2 |
3 |
4 |
B반 번호 |
3 |
4 |
5 |
6 |
A반 번호와 B반 번호를 모두 추출하여라.
Select *
From (
Select * From [A반번호]
Union
Select * From [B반번호]
) As A
A반 번호에도 있고 B반 번호에도 존재하는 값을 추출하여라.
SELECT *
FROM [A반번호] Inner Join [B반번호]
ON [A반번호].[A반번호] = [B반번호].[B반번호]
A반 번호에는 있고 B반 번호에는 없는 것을 추출하여라.
SELECT *
FROM [A반번호] AS A
WHERE (SELECT TOP 1 [B반번호] FROM [B반번호] AS B WHERE B.[B반번호] = A.[A반번호])IS NULL
A반 번호 테이블의 모든 행들과 B반 번호 의 모든 행을 조인 하여라
SELECT *
FROM [A반번호] AS A cross join [B반번호] AS B
관계 연산자
Selection
Selection은 relational의 어떤 선택조건을 만족하는 Tuple들을 선택하는 것이다. 여기서 relational은 우리가 알고 있는 Table이라고 생각하면 되고, Tuple은 Table의 row라고 생각하면 된다. Selection의 기호는 σ(시그마) 이며, 표현 식은 σ(조건)R 이렇게 된다.
Projection
Projection은 relational에서 Attribute 리스트에 명시된 Attribute만 선택하는 것이다. Projection의 기호는 π (파이) 이며, 표현 식은 π (속성리스트)R 이다.
Join
Join은 두 relational으로부터 관련 있는 Tuple들을 결합하여 하나의 새로운 Tuple로 생성하는 것이다. 기호는 ▷◁ 이며. 표현 식은 ▷◁<속성=속성>S 이다.
Division
Division은 한 relational에서 다른 relational의 Attribute를 제외한 속성만 선택하는 것이다. 기호는 % 이며, 표현 식은 R1(속성%속성)R2 이다.
User Table
Nick Name |
Base Level |
Job Level |
건방진연이 |
50` |
99 |
올리비아로렌 |
39 |
77 |
세바스찬 |
10 |
35 |
<표 1-1>
위 <표 1-1> 기준으로 σ(Base Level<40)User Table 이라고 하였을 때, Base Level이 40보다 작은 Tuple만 선택하면 되는 것이다.
Nick Name |
Base Level |
Job Level |
올리비아로렌 |
39 |
77 |
세바스찬 |
10 |
35 |
다시 <표 1-1>을 기준으로 π (Nick Name, Job Level)User Table 이라고 가정을 하였을 때, User Table에서 Nick Name와 Job Level 만을 선택하면 되는 것이다.
Nick Name |
Job Level |
건방진연이 |
99 |
올리비아로렌 |
77 |
세바스찬 |
35 |
Join을 예로 들기 위해 <표 1-2>를 만들었다.
Billing Table
Nick Name |
Name |
Age |
건방진연이 |
이승연 |
33 |
올리비아로렌 |
이훈정 |
30 |
세바스찬 |
이두연 |
26 |
<표 1-2>
<표 1-1>과 <표 1-2>를 기준으로 Billing Table▷◁<Nick Name=Nick Name>User Table 이라고 하면, Billing Table과 User Table의 공통된 부분인 Nick Name을 이용하여 Nick Name 중심으로 새로운 relational을 생성 하면 되는 것이다.
Nick Name |
Base Level |
Job Level |
Name |
Age |
건방진연이 |
50 |
99 |
이승연 |
33 |
올리비아로렌 |
39 |
77 |
이훈정 |
30 |
세바스찬 |
10 |
35 |
이두연 |
26 |
Division 을 설명하기 위해 <표 2-1>와 <표 2-2>를 만들었다.
구매 Table
이름 |
상품 |
이승연 |
새우깡 |
이승연 |
초코파이 |
이훈정 |
볼펜 |
이두연 |
담배 |
이훈정 |
새우깡 |
이두연 |
맥주 |
이승연 |
맥주 |
이훈정 |
초코파이 |
<표 2-1>
상품 Table
상품 |
새우깡 |
초코파이 |
<표 2-2>
두 Table을 기준으로 구매 Table(상품 % 상품)상품 Table을 하면, 피제수 Table에서 상품 column이 ‘새우깡, 초코파이’인 것만 선택해 주면 된다.
이름 |
상품 |
이승연 |
새우깡 |
이승연 |
초코파이 |
이훈정 |
새우깡 |
이훈정 |
초코파이 |
DBA 이승연
GRAVITY co., Ltd
Global Business Dept / Tech Support
http://www.gravity.co.kr
http://www.ddoung2.com
----------------------------------------------------------
'MSSQL > T-SQL' 카테고리의 다른 글
GROUP BY에 대하여 (0) | 2009.04.28 |
---|---|
SELECT절 집계 함수 (0) | 2009.04.28 |
데이터형식 우선 순위 (0) | 2009.03.27 |
모든테이블 삭제하기 (1) | 2009.03.27 |
공백을 구분하여 문자열 자르기 (0) | 2009.03.26 |