관계대수란?
- 릴레이션들을 다루는 연산들
- 검색 요구(질의)를 기술하는 데 사용
- 릴레이션에 대한 연산의 결과도 릴레이션이다
관계 대수 연산의 종류
수학적 집합 연산
- 합집합
- 차집합
- 교집합
- 카티션 프로덕트
관계 데이터 베이스를 위한 특별 연산
- 실렉트
- 조인
- 프로젝트
실렉트(Select) 연산 (선택조건, 튜플)
𝞼 시그마로 표기
- 릴레이션 R에서 주어진 선택조건을 만족하는 튜플(속성의 모임)들을 선택함
- 결과 릴레이션은 R과 동일한 애트리뷰트들을 가짐(릴레이션 차수 동일)
- 결과 릴레이션은 r(R)의 투플 중 애트리 뷰트 값들이 선택조건을 만족하는 튜플들로 구성됨
실렉트 연산 형식
𝞼 <선택조건> (R)
- 선택 조건은 R의 애트리 뷰트들에 대한 부울식(Boolean equation)이다
- <애트리뷰트 이름> <비교연산자> <상수값>
- ex) Age >= 18
- <애트리 뷰트 이름> <비교연산자> <애트리뷰트 이름>
- ex) Emp.ID = Manager.ID
- <애트리뷰트 이름> <비교연산자> <상수값>
실렉트 연산 예제
𝞼DNO=4(EMPLOYEE)
SELECT *
FROM EMPLOYEE
WHERE DNO=4;
𝞼SALARY>30000(EMPLOYEE)
SELECT *
FROM EMPLOYEE
WHERE SALARY > 30000;
𝞼(DNO=4 AND SALARY>25000) OR (DNO=5 AND SALARY>30000) (EMPLOYEE)
SELECT *
FROM EMPLOYEE
WHERE (DNO=4 AND SALARY > 25000) OR
(DNO=5 AND SALARY > 30000);
논리 연산자 이용
AND, OR, NOT 등 논리연산자 이용 가능
1. 교환법칙 성립
𝞼<조건1>(𝞼<조건2>(R)) = 𝞼<조건2>(𝞼<조건1>(R))
2. 결합법칙 성립
𝞼<조건1>(𝞼<조건2>(...(𝞼<조건n>(R)...)) = 𝞼<조건1> AND <조건2> ... AND<조건n>(R)
프로젝트(Project) 연산 (애트리뷰트 리스트)
∏ 파이로 표기
- 릴레이션 R에서 애트리뷰트 리스트에 명시된 애트리뷰트들만 선택
- 결과 릴레이션은 애트리뷰트 리스트에 명시된 R의 애트리뷰트들만 가짐
- 결과 릴레이션의 투플 수는 원래 릴레이션의 투플 수보다 작거나 같다
결과 릴레이션이 원래 릴레이션의 투플수보다 작은 이유
릴레이션은 중복 투플을 인정하지 않는 다 -> 중복 투플의 제거
- 애트리뷰트 리스트가 원래 릴레이션의 수퍼키를 포함하면 결과 릴레이션과 원래 릴레이션의 투플 수는 동일하다
- 슈퍼키를 포함하면 중복되지 않기 때문이다
프로젝트 연산 형식
∏<애트리뷰트 리스트> (R)
프로젝트 연산 예제
∏ FNAME, LNAME, SALARY(EMPLOYEE)
SELECT FNAME, LNAME, SALARY
FROM EMPLOYEE;
∏ SEX, SALARY(EMPLOYEE)
- 집합 연산을 하기 때문에 결과값이 여러명 이라도 한명만 표시한다
- 투플의 중복을 제거한다
- SQL에서 DISTINCT 사용
SELECT DISTINCT SEX, SALARY
FROM EMPLOYEE;
연산 순서와 이름 변경 연산
다수의 연산을 결합하여 관계 대수식(질의)을 형성할 수 있음
- 실렉트 후 프로젝트를 하거나, 프로젝트 후 실렉트를 하는 등 결합 가능
- 연산의 순서가 질의 결과에 영향을 미칠 수 있음
- 𝞼와 ∏는 일반적으로 교환법칙을 성립하지 않음으로 순서가 바뀔 수 없다.
연산 순서 예제
소괄호가 항상 먼저 실행연산된다
∏ FNAME, LNAME, SALARY(𝞼 DNO=5(EMPLOYEE))
SELECT FNAME, LNAME, SALARY
FROM EMPLOYEE
WHERE DNO=5;
!! 수행 될 수 없는 질의가 되어버린다 !!
𝞼 DNO=5(∏ FNAME, LNAME, SALARY(EMPLOYEE))
SELECT *
FROM (SELECT FNAME, LNAME, SALARY FROM EMPLOYEE)
WHERE DNO=5;
이름 변경 연산
= 중간 단계의 임시 릴레이션에 이름을 부여할 수 있다
DEP5_EMPS <- 𝞼 DNO=5(EMPLOYEE)
RESULT <- ∏ FNAME, LNAME, SALARY(DEP5_EMPS)
= 결과 릴레이션의 애튜리뷰트 이름을 재명명 할 수 있다
TEMP <- 𝞼 DNO=5(EMPLOYEE)
R(FIRSTNAME, LASTNAME, SALARY) <- ∏ FNAME, LNAME, SALARY(TEMP)
SQL에서는 별명 사용으로 해석함
SELECT E.FNAME AS FIRSTNAME, E.NAME AS LASTNAME, E.SALARY AS SALARY
FROM EMPLOYEE AS E
WHERE E.DNO=5;
결과 (애트리뷰트 이름 재명명됨)
FIRSTNAME | LASTNAME | SALARY |
John | Smith | 30000 |
Franklin | Wong | 40000 |
Ramesh | Narayan | 38000 |
Joyce | English | 25000 |
'전공 > 데이터베이스' 카테고리의 다른 글
관계 대수 연산과 관계 대수 질의 예시 (1) | 2024.01.10 |
---|