제 4 장 관계 데이터 연산 1. 개요 2. 관계 대수 3. 관계 해석
1. 개 요 관계 데이터 연산 : 1970년 E. F. Codd 가 발표한 관계 데이터 모델에 포함된 연산 방법. 1. 개 요 관계 데이터 연산 : 1970년 E. F. Codd 가 발표한 관계 데이터 모델에 포함된 연산 방법. - 관계 대수 : 관계 데이터베이스의 릴레이션을 조작하기 위하여 절차를 명시하는 절차 언어 (procedural language). - 관계 해석 : 릴레이션에 저장된 어떤 데이터를 조작할 것인지를 명시하는 비절차 언어(nonprocedural language).
관계 데이터 연산 관계 데이터 연산 관계 대수 (Relational Algebra) 관계 해석 (Relational Calculus) 절차 언어 (Procedural language) 어떻게(How)의 관점 비절차 언어 (Nonprocedural language) 무엇(What)의 관점 사용자 입장의 편의성 증대 일반 집합 연산자 순수 관계 연산자 투플 관계 해석 (Tuple Relational Calculus) 도메인 관계 해석 (Domain Relational Calculus)
예제 릴레이션
관계 대수 절차 언어인 관계 대수는 각각 4 가지의 일반 집합(set-theoretic) 연산자와 4가지의 순수 관계(native relational) 연산자로 구성된다 - 일반 집합 연산자 : 관계 데이터베이스의 릴레이션 내의 투플들의 집합을 이용. - 순수 관계 연산자 : 투플들의 구조를 이용.
관계 대수 연산자
관계 대수 연산자의 우선 순위
2. 1 일반 집합 연산 관계 대수의 일반 집합 연산자는 합집합(UNION), 차집합(DIFFERENCE), 교집합(INTERSECTION), 카티션 프로덕트(CARTESIAN PRODUCT) 등이다. 이 중에서 카티션 프로덕트를 제외한 나머지 3가지 연산자는 모두 피연산자인 두 개의 릴레이션이 모두 합병 가능(union-compatible)해야 한다.
2. 1. 1 합집합 합집합(UNION) 연산은 합병 가능한 두 개의 릴레이션 A와 B의 합집합(A∪B)을 구하는 것으로, 합집합 연산의 결과는 릴레이션 A 또는 B에 속하는 투플들로 구성된 릴레이션이다. . 합집합(UNION) 연산자의 개념 A B A∪B 예제 1 예제 릴레이션 A와 B의 합집합(A∪B) 연산의 결과는 다음과 같다. a b a1 b1 b2 a2 b3 A B a3 A ∪ B
2. 1. 2 교집합 A B A ∩ B 예제 2 예제 릴레이션 A와 B의 교집합(A∩B) 연산의 결과는 다음과 같다. a b 교집합(INTERSECTION) 연산은 합병 가능한 두 개의 릴레이션 A와 B의 교집합(A∩B)을 구하는 것으로, 교집합 연산의 결과는 릴레이션 A와 B에 공통적으로 속하는 투플들로 구성된 릴레이션이다. A B A ∩ B 예제 2 예제 릴레이션 A와 B의 교집합(A∩B) 연산의 결과는 다음과 같다. a b a1 b1 b2 a2 b3 A B a3 A ∩ B
차집합(DIFFERENCE)연산의 개념 2. 1. 3 차집합 차집합(DIFFERENCE) 연산은 합병 가능한 두 개의 릴레이션 A와 B의 차집합(A B)을 구하는 것으로, 차집합(A B) 연산의 결과는 릴레이션 A에만 있고 B에는 없는 투플들로 구성된 릴레이션이다. 차집합(DIFFERENCE)연산의 개념 A B A - B 예제 3 예제 릴레이션 A와 B의 두 가지 차집합(A B와 B A) 연산의 결과는 다음과 같다. a b a1 b1 b2 a2 b3 A B a3 A - B B - A
카티션 프로덕트(CARTESIAN PRODUCT) 연산의 개념 2. 1. 4 카티션 프로덕트 카티션 프로덕트(CARTESIAN PRODUCT) 연산은 두 개의 릴레이션 A와 B의 카티션 프로덕트(A B)를 구하는 것으로, 카티션 프로덕트의 연산 결과는 A에 속한 각 투플 a에 대하여 B에 속한 투플 b를 모두 접속(concatenation)시킨 투플들(a b)로 구성된 릴레이션이다. 카티션 프로덕트(CARTESIAN PRODUCT) 연산의 개념 a1 b1 a1 b2 a2 b1 a2 b2 a1 a2 b1 b2 A B A X B
2. 1. 4 카티션 프로덕트 예제 4 예제 릴레이션 A와 B의 카티션 프로덕트(CARTESIAN PRODUCT) 연산의 결과는 다음과 같다. a b a1 b1 b2 a2 b3 A c c1 c3 B A.a A.b B.b B.c A X B
2. 2 순수 관계 연산 관계 대수의 순수 관계 연산자는 셀렉트(SELECT), 프로젝트(PROJECT), 조인(JOIN), 디비전(DIVISION) 등이다 2. 2. 1 셀렉트 - 셀렉트(SELECT) 연산은 릴레이션에서 주어진 조건을 만족하는 투플들을 검색하는 것으로, 기호는 그리스 문자의 시그마(σ)를 이용한다. 셀렉트 (SELECT) 연산의 개념 셀렉트 연산 표기법 ① σ조건식(릴레이션) ② 릴레이션 where 조건식 조건식 릴레이션 셀렉트 연산의 결과 릴레이션
2. 2 순수 관계 연산 학생(STUDENT) 릴레이션에서 학과(dept) 속성 값이 “컴퓨터공학과”인 투플들을 검색하라. 예제 5 학생(STUDENT) 릴레이션에서 학과(dept) 속성 값이 “컴퓨터공학과”인 투플들을 검색하라. ① 관계 대수 1 : σdept=“컴퓨터공학과”(STUDENT) ② 관계 대수 2 : STUDENT where dept=“컴퓨터공학과” ③ 결과 릴레이션 : 학번 s_no 이름 s_name 학과 dept 학년 year 전화 s_tel 주소 s_address 지도교수 advisor 생년월일 s_birth 9911001 9911003 9811015 : 정찬우 강재우 이길녀 컴퓨터공학과 2 3 023355519 0325491115 023386634 서울… 인천… 0001 0002 0003 19800505 19801119 19791130
2. 2 순수 관계 연산 등록(ENROLLMENT) 릴레이션에서 강좌번호(c_no) 속성 값이 “0001”인 투플들을 예제 6 등록(ENROLLMENT) 릴레이션에서 강좌번호(c_no) 속성 값이 “0001”인 투플들을 검색하라. ① 관계 대수 1 : σc_no=“0001”(ENROLLMENT) ② 관계 대수 2 : ENROLLMENT where c_no=“0001” ③ 결과 릴레이션 : 강좌번호 c_no 학번 s_no 성적 grade 0001 : 9911001 9912002 A B
2. 2. 2 프로젝트 프로젝트(PROJECT) 연산은 릴레이션에서 주어진 조건을 만족하는 속성들을 검색하는 것으로, 기호는 그리스 문자의 파이(π)를 이용한다. 릴레이션에서 속성은 열(column)을 가리키므로 프로젝트를 수직적 연산(vertical operation)이라고도 한다. 프로젝트(PROJECT) 연산 개념 프로젝트 연산 표기법 ① π속성리스트(릴레이션) ② 릴레이션[속성리스트] 릴레이션 프로젝트 연산의 결과 릴레이션 프로젝션
2. 2. 2 프로젝트 학과(DEPARTMENT) 릴레이션에서 학과코드(dept_no), 학과명(dept_name), 예제 7 학과(DEPARTMENT) 릴레이션에서 학과코드(dept_no), 학과명(dept_name), 위치(location) 속성 값을 검색하라. ① 관계 대수 1 : πdept_no, dept_name, location(DEPARTMENT) ② 관계 대수 2 : DEPARTMENT[dept_no, dept_name, location] ③ 결과 릴레이션 : 학과코드 dept_no 학과명 dept_name 위치 location 001 002 003 : 컴퓨터공학과 정보과학과 정보통신학과 T101 T201 T301
2. 2. 2 프로젝트 예제 8 강좌(COURSE) 릴레이션에서 강좌번호(c_no)와 강좌이름(c_name) 속성 값을 검색하라. ① 관계 대수 1 : πc_no, c_name(COURSE) ② 관계 대수 2 : COURSE[c_no, c_name] ③ 결과 릴레이션 : 학과코드 dept_no 학과명 dept_name 위치 location 001 002 003 : 컴퓨터공학과 정보과학과 정보통신학과 T101 T201 T301
2. 2. 3 조인 조인(JOIN) 연산은 두 개의 릴레이션 A와 B에서 공통된 속성을 연결하는 것이다. 이와 같은 조인 연산은 하나의 릴레이션으로는 원하는 결과를 얻을 수 없을 경우, 두 개 이상의 릴레이션을 공통 속성으로 연결하여 원하는 결과를 포함한 릴레이션을 생성할 때 이용한다. 조인(JOIN) 연산 개념 조인 속성 A B A B a b b c a b c a1 b1 b1 c1 a1 b1 b1 a2 b2 b1 c2 a1 b1 c2 a3 b3 b2 c3 a2 b2 c3 a4 b4 b2 c4 a2 b2 c4 A와 B의 공통 속성 값 : b1, b2
2. 2. 3 조인 예제 9 강좌(COURSE) 릴레이션과 강의(LECTURE) 릴레이션을 조인하라. ② 결과 릴레이션 : 0001 0002 : 정보사회와 컴퓨터 데이터베이스 3 R 강좌번호 c_no 강좌이름 c_name 시수 times 학점 point 필수/선택 r/o 0005 mon tue wed thu 1 5 T447 T448 T337 교수번호 p_no 요일 day_week 시간 time 강의실 room_no
2. 2. 3 조인 강좌번호 c_no 강좌이름 c_name 교수번호 p_no 요일 day_week 0001 0002 : 정보사회와 컴퓨터 데이터베이스 0001 0002 0005 mon tue wed thu
2. 2. 3 조인 강좌번호 c_no 강좌이름 c_name 교수번호 p_no 요일 day_week 0001 : 정보사회와 컴퓨터 0001 0002 mon tue
2. 2. 4 디비전 두 개의 릴레이션 A와 B에 대한 디비전(DIVISION) 연산인 A ÷ B의 결과는 다음과 같다. 나누어지는 릴레이션인 A는 동일한 어트리뷰트 값에 대하여 릴레이션 B의 모든 내용을 포함한 것이 결과 릴레이션이 된다 디비전(DIVISION) 연산 개념 a b a1 b1 b2 a3 b4 A B a4 a5 A에 꼭 포함되어야 할 B의 공통 속성 값 : b1, b2 a6 b3 ÷
근원연산과 복합연산 근원연산 하나의 논리적 기능을 수행하는 것으로 다른 연산을 이용하여 표현할 수 없는 연산 - 합집합, 차집합, 카테시안 프로덕트, 실렉트, 프로젝트 복합연산 근원연산을 이용하여 그 연산의 기능을 표현할 수 있는 연산 - 조인, 교집합, 디비젼 - 구현 방법 ???
2. 3 확장 관계 대수 연산 2.2절에서 설명한 관계 대수 연산을 확장한 연산들이 있다. 그 중 대표적인 것들은 조인 연산에 관련된 것으로, 외부 조인(OUTER JOIN), 세미 조인(SEMI JOIN), 세타 조인(THETA JOIN) 등으로 분류할 수 있다. 확장 관계 대수 연산 요약
2. 3. 1 외부 조인 외부 조인(OUTER JOIN)은 두 개의 릴레이션을 공통 속성을 이용하여 연결할 경우, 공통되는 속성 값이 없어 연결이 이루어지지 않는 투플들 까지도 결과 릴레이션에 포함시키는 것이다. 이 때, 공통 속성 값이 없는 부분은 null 값으로 채워진다. 예제 13 강좌(COURSE) 릴레이션과 강의(LECTURE) 릴레이션을 외부 조인하라 (<예제 7.1>의 내용을 외부 조인으로 수행). ① 관계 대수 : COURSE LECTURE ② 결과 릴레이션 : 0001 0002 0003 0004 : 정보사회와 컴퓨터 데이터베이스 네트워크 C언어 3 R O 강좌번호 c_no 강좌이름 c_name 시수 times 학점 point 필수/선택 r/o 0005 null mon tue wed thu 1 5 T447 T448 T337 교수번호 p_no 요일 day_week 시간 time 강의실 room_no
외부조인 예
2. 3. 2 세미 조인 세미 조인(SEMI JOIN)은 조인 대상 릴레이션 중 하나를 프로젝트(PROJECT) 연산을 수행한 후 조인을 하는 것이다. 세미 조인 표기 방법 릴레이션 A와 B를 세미 조인하는 경우 A B로 표기한다. 2. 3. 3 세타 조인 세타 조인(THETA JOIN)은 다양한 조인 조건을 세타 연산자(비교 연산자)를 이용하여 표현할 수 있는 것이다.. 세타 조인 표기 방법 릴레이션 A의 속성 a와 릴레이션 B의 속성 b를 연산자 조건으로 세타 조인하는 경우 로 표기한다.
세미조인 예
기타연산 - 외부합집합
3 . 관계 해석 비절차 언어인 관계 해석(relational calculus)은 데이터베이스를 이용하여 얻고자 하는 결과가 무엇(What)인가를 기술하는 것으로, 어떻게(How)를 기술하는 관계 대수와 차이가 있다. - 투플 관계 해석 (tuple relation calculus) - 도메인 관계 해석 (domain relational calculus)
투플 관계 해석식 예1
투플 관계 해석식 예2
관계대수 연산 – 보충1 데이터 삭제(deletion) 선택된 투플들을 삭제하기 위한 연산자 형식 : 예) 등록 릴레이션에서 학번이 9813100인 학생의 모든 기록을 삭제하라. 예) 0002 강좌의 성적이 F인 학생을 학생 릴레이션에서 삭제하라. ??? 예) 이번 학기에 개설되지 않은 강의를 강좌 릴레이션에서 모두 삭제하라.
관계대수 연산 – 보충2 데이터 삽입(insertion) 임의의 투플들을 삽입하기 위한 연산자 형식 : 과목을 삽입하라. 예) 0002 강좌를 듣는 학생들은 0032 과목을 모두 듣는 결과가 되도록 등록 릴레이 션에 필요 투플들을 삽입하라. 단, 성적은 null로 처리한다. ???
관계대수 연산 – 보충3 데이터 갱신(updating) 임의의 투플들을 갱신하기 위한 연산자 형식 : Fi가 i번째 어트리뷰트이면 갱신이 없고, 대수식이면 그 식에 따라 갱신한다는 의미 예) 모든 과목의 시수를 1씩 증가시켜라. 예) 월요일에 있는 모든 수업의 시작시간을 한 시간씩 늦추도록 수정하라. ???
관계대수 연산 – 보충4 개명 연산(rename, ) 관계 대수 연산의 결과로 만들어지는 릴레이션을 참조하기 위해 이름을 설정해 주는 연산 예) < 두 가지 사용 구문 >
관계대수 연산 – 보충5 예제 은행 데이터베이스 참조 Perryridge 지점에 대출 금액이 1200을 넘는 고객의 이름을 검색하라. 은행에서 가장 큰 자산 값을 검색하라. Smith와 같은 도시, 같은 거리의 주소를 가진 모든 고객들의 이름을 검색하라. Brooklyn의 모든 지점에 예금계좌를 가진 고객들의 이름을 검색하라. 대출 금액이 가장 적은 고객들의 이름을 모두 검색하라.