5장. 관계대수와 관계 해석 관계 대수 릴레이션들을 다루는 연산들의 집합 검색 요구(질의)를 기술하는 데에 사용 관계 데이터베이스에서 명세할 수 있는 요청들의 유형 이해 및 질의 처리 최적화에 이용 됨
[그림 4.6] COMPANY 스키마의 관계 데이터베이스 인스턴스
5.1.1 실렉트(SELECT) 연산 SELECT 연산 (σ로 표기) 연산 형식: σ<선택조건>(<릴레이션이름>) <선택조건>: <애트리뷰트이름> <비교연산자> <상수값>, <애트리뷰트이름> <비교연산자> <애트리뷰트이름> 과 논리 연산자 AND, OR, NOT의 조합 * 비교 연산자: ,, ,,, 결과는 애트리뷰트 값들이 <선택조건>을 만족하는 투플들로 구성 된 릴레이션.
예제1 : σDno=4 (EMPLOYEE) 예제 2: Fname Minit Lname Ssn Bdate Address Sex Salary Super_ssn Dno Alicia J Zelaya 999887777 1968-01-19 3321 Castle, Spring, TX F 25000 987654321 4 Ahmad V Jabbar 987987987 1969-03-29 980 Dallas, Houston, TX M 25000 987654321 4 Jennifer S Wallace 987654321 1941-06-20 291 Berry, Bellaire, TX F 43000 888665555 4 예제 2: σ(Dno=4 AND Salary>25000) OR (Dno=5 AND Salary > 30000) (EMPLOYEE)
5.1.2 프로젝트(PROJECT) 연산 PROJECT 연산 (로 표기): 테이블로부터 어떤 열들을 선택하는 연산 연산 형식: L(R) 즉 <애트리뷰트 리스트>(<릴레이션이름>) 결과 릴레이션은 L에 명시된 R의 애트리뷰트들만 갖는다. 예제: Lname,Fname,Sslary (EMPLOYEE) PROJECT 연산은 결과 릴레이션이 수학적 집합이므로 중복된 투플들을 제거한다. 예) Sex, Salary (EMPLOYEE)
5.1.3 연산의 순서와 이름 변경 연산 몇개의 연산들이 결합되어 관계대수식(질의)을 형성한다. 예) 부서 5에서 일하는 사원들의 이름과 봉급을 검색하라. Fname,Lname,Salary (σDno=5 (EMPLOYEE)) 각 중간 단계의 릴레이션들에 이름을 부여할 수도 있다. DEPT5_EMPS ←σDno=5 (EMPLOYEE) RESULT ← Fname,Lname,Salary (DEPT5_EMPS)
Fname John Franklin Ramesh Joyce Lname Smith Wong Narayn English Fname Minit Lname Ssn Bdate Address Sex Salary Super_ssn Dno Franklin T Wong 333445555 1955-12-08 638 Voss, Houston, TX M 40000 888665555 5 Ramesh K Narayan 666884444 1962-09-15 975 FireOak, Humble, TX M 38000 333445555 5 John B Smith 123456789 1965-01-09 731 Fondren, Houston, TX M 30000 333445555 5 Joyce A English 453453453 1972-07-31 5631 Rice, Houston, TX F 25000 333445555 5 Fname John Franklin Ramesh Joyce Lname Smith Wong Narayn English Salary 30000 40000 38000 25000
결과 릴레이션에 나타나는 애트리뷰트들의 이름을 재명명(rename)할 수도 있다. TEMP ←σDno=5 (EMPLOYEE) R(First_name, Last_name, Salary) ← Fname,Lname,Salary(TEMP) 또는 Temp2 ← Fname,Lname,Salary(TEMP) R ← (First_name, Last_name, Salary) (TEMP2)
5.2 집합이론과 관계 대수 연산 수학적 집합 이론에서의 이진 연산 합집합: R1∪R2 교집합: R1∩R2 차집합: R1-R2
연산 ∪,∩,-에 대하여, 피연산자 릴레이션 R1(A1,A2,. ,An)과 R2(B1,B2, 연산 ∪,∩,-에 대하여, 피연산자 릴레이션 R1(A1,A2,...,An)과 R2(B1,B2,...,Bn)는 애트리뷰트들의 갯수가 같고 대응되는 애트리뷰트들의 도메인이 호환성을 갖아야 한다. 즉, i=1,2,...,n에 대하여 dom(Ai) = dom(Bi)이다. 연산 ∪,∩,-의 결과 릴레이션은 피연산자 릴레이션 R1과 같은 애트리뷰트 이름들을 갖는다.
예: 5번 부서에서 일하거나 5번 부서에서 근무하는 사원들을 감독하는 모든 사원들의 주민 등록 번호 검색 DEPT5_EMPS ←σDno=5 (EMPLOYEE) RESULT1 ← Ssn (DEPT5_EMPS) RESULT2(Ssn) ← Super_ssn (DEPT5_EMPS) RESULT RESULT1 ∪ RESULT2
카티션 프로덕트 (CARTESIAN PRODUCT) R1(A1, A2, …, Am) × R2(B1, B2, …, Bn) R(A1, A2, …, Am, B1, B2, …, Bn) R1(A1,A2,...,Am)×R2 (B1,B2,...,Bn)의 결과 릴레이션 R은 R1의 투플과 R2 의 투플의 모든 조합에 대한 투플을 가짐. R1이 n1개의 투플을, R2가 n2개의 투플을 갖는다면, R은 n1*n2 개의 투플을 갖는다.
예) DEPARTMENT×EMPLOYEE DNAME DNUMBER MGRSSN …... FNAME ...... SSN …... DNO Research 5 333445555 …... John …... 123456789 ...... 5 Research 5 333445555 …... Franklin ...... 333445555 …... 5 …… …… …… …… …… …… …… …… …... Research 5 333445555 …... James ...... 888665555 ...… 1 Administration 4 987654321 …... John ...... 123456789 ...… 5 …… …… …… …… …… …… …… …… …... Administration 4 987654321 …… Jennifer …… 987654321 …… 4 …… …… …… …… …… …… …… …… …... Headquarters 1 888665555 …... James ...... 888665555 ...… 1
카티션 프로덕트는 적절한 SELECT 연산과 함께 사용되면 두 릴레이션에서의 관련된 투플들을 조합할 수 있다. 예제: 모든 DEPARTMENT 투플과 그 부서장의 EMPLOYEE 투플을 조합하라. DEP_EMP ← DEPARTMENT×EMPLOYEE DEPT_MANAGER ← σMgr_ssn=Ssn(DEP_EMP)
σMgr_ssn=Ssn(DEP_EMP) Dname Dnumber Mgr_ssn …... Fname ...... Ssn …… Dno Research 5 333445555 …... Franklin ...... 333445555 …... 5 Administration 4 987654321 …… Jennifer …… 987654321 …… 4 Headquarters 1 888665555 …... James ...... 888665555 ...… 1
예제: 모든 여자 사원들에 대하여 그들의 부양 가족들의 이름 검색 FEMALE_EMPS ← σSex=‘F’(EMPLOYEE) EMPNAMES ← Fname, Lname, Ssn(FEMALE_EMPS) EMP_DEPENDENTS ← EMPNAMES× DEPENDENT ACTUAL_DEPENDS ← σSsn=Essn(EMP_DEPENDENTS) RESULT ← Fname, Lname, Dependent_name(ACTUAL_DEPENDS)
5.3.1 조인(JOIN) 연산 조인 연산은 릴레이션들간의 관계를 처리할 수 있게 해주는 연산 두 릴레이션 R(A1,A2,...,Am)과 S(B1,B2,...,Bn)에 대한 조인 연산의 일반적 형태는 R <조인조건>S 조인 결과는 n+m개의 애트리뷰트들을 순서대로 갖는 릴레이션 Q(A1,A2,...,Am,B1,B2,...,Bn)으로 R과 S의 투플들의 모든 조합 중 조인 조건을 만족하는 투플로 구성
예제: 모든 부서의 이름과 그 부서의 관리자의 이름 검색 DEPT_MGR ← DEPARTMENT Mgr_ssn=SsnEMPLOYEE RESULT ← Dname, Lname, Fname(DEPT_MGR) 조인 연산은 실렉트가 따라오는 카티션 프로덕트와 유사 TEMP_DEPT_MGR ← DEPARTMENT× EMPLOYEE DEPT_MGR ← σMgr_ssn=Ssn(TEMP_DEPT_MGR)
5.3.2 동등 조인과 자연 조인 조인 조건 <조건> AND <조건> AND … AND <조건> 각 조건의 형태는 Ai θ Bj 이며, Ai 는 R의 애트리뷰트, Bj 는 S의 애트리뷰트임 조인 조건에 사용된 속성 (Ai 와 Bj 를 조인 속성이라고 부름) Theta Join 일반적인 조인 조건(>, =, < 등)을 가진 조인 연산
조인 조건에서 동등 비교(equality comparison) 만을 사용하는 조인 EQUIJOIN 조인 조건에서 동등 비교(equality comparison) 만을 사용하는 조인 EQUIJOIN 사용 예제: 모든 DEPARTMENT의 이름과 그 관리자의 이름을 검색하라: T ← DEPARTMENT Mgr_ssn=Ssn EMPLOYEE RESULT ← ΠDname,Fname,Lname(T)
자연 조인 (NATURAL JOIN) (*): EQUIJOIN의 결과에는 두 조인속성의 값이 중복되어 나타남 조인 결과에서 조인 속성 하나를 제거하여 중복된 값이 나타나지 않도록 한 조인을 자연조인이라고 함 표시법 : R ← R1*(R1의 조인 애트리뷰트들),(R2의 조인 애트리뷰트들) R2 예제: 모든 EMPLOYEE의 이름과 그의 DEPARTMENT 이름을 검색하라 T ← EMPLOYEE *(Dno),(Dnumber) DEPARTMENT RESULT ← ΠFname,Lname,Dname(T)
두 조인 속성이 동일한 이름을 갖는다면 간단히 R ← R1* R2라고 표시함 예제: 모든 EMPLOYEE의 이름과 그 상급자의 이름을 검색하라: SUPERVISOR(Super_ssn,SFN,SLN) // 속성 이름의 변경 ←ΠSsn,Fname,Lname(EMPLOYEE) T ← EMPLOYEE * SUPERVISOR // 자연조인 RESULT ← ΠFname,Lname,SFN,SLN(T)
주의 자연 조인에서는 조인 애트리뷰트들이 양쪽의 릴레이션에서 동일한 이름을 가져야 하며, 그렇지 않는 경우 조인 속성의 이름을 먼저 동일하게 변경해야 함 두 릴레이션에서 하나 이상의 조인 애트리뷰트 쌍이 존재하는 경우 주의가 요망됨
예제: “모든 EMPLOYEE의 이름과 그가 일하는 DEPARTMENT의 이름을 검색하라” 에 대한 자연 조인은 다음과 같이 작성함 DEPT ← (Dname, Dnum, Mgr_ssn, Mgr_start_date) (DEPARTMENT) PROJ_DEPT ← PROJECT * DEPT // DUNM이 조인속성임; // MGRSSN은 조인속성이 아님
5.3.3 관계대수 연산의 완전집합 최소한의 연산자 집합 지금까지 소개한 모든 연산자는 선택(SELECT), 프로젝트(PROJECT), 합집합(UNION), 차집합(SET DIFFERNECE), 카티션 프로덕트 (CARTESIAN PRODUCT) 연산들 만의 조합으로 표현할 수 있음 연산자 집합 {σ,Π, ∪,-,×}를 관계대수 연산자의 완전 집합(complete set)이라 부름 이 연산자 집합과 동등한 모든 질의 언어들은 관계적으로 완전하다(relationally complete)라고 정의함
추가적으로 유용한 연산자들 디비젼(division) 연산 집단 함수(aggregate functions)와 그룹화(grouping) 연산 외부 조인(OUTER JOIN)과 외부 합집합(OUTER UNION)