>P72~ 추가적인 질의 예
#### Q1. 2000년 이후에 임용된 교수의 이름과 주민등록번호를 검색하라.
1. 2000년 이후에 임용된 교수
σ <sub>year_emp >= 2000</sub> (professor)
2. 그 교수의 이름과 주민등록번호
π <sub>name, resident_id</sub> (1번)
A1. π <sub>name, resident_id</sub> (σ <sub>year_emp >= 2000</sub> (professor))
#### 2. '컴퓨터공학과' 학생들의 학번과 이름을 검색하라.
1. '컴퓨터공학과'가 포함되어 있는 department테이블과 학번과 이름이 포함되어 있는 student를 자연조인한다.
(department ⋈ student)
2. 조인된 테이블에서 '컴퓨터공학과' 레코드를 걸러낸다.
σ <sub>dept_name = '컴퓨터공학과'</sub> (1번)
3. 2번에서 걸러낸 레코드 중에서 학번과 이름 필드를 걸러낸다.
π <sub>stu_id, name</sub> (2번)
A2. π <sub>stu_id, name</sub> (σ <sub>dept_name = '컴퓨터공학과'</sub> (department ⋈ student))
#### 3. 2012년 2학기에 학생들이 수강한 과목에 대해 과목번호와 학번, 성적을 검색하라.
1. 년, 학기, 과목번호는 class에 학번, 성적은 takes에 있으므로 둘을 자연조인 시킨다.
(class ⋈ takes)
2. 2012년 2학기 레코드를 걸러낸다.
σ <sub>year = 2012 ∧ semester = 2</sub> (1번)
//integer에는 작은 따옴표 붙이지 말기!
3. 과목번호와 학번, 성적 필드 걸러내기
π <sub>course_id, stu_id, grade</sub> (2번)
A3. π <sub>course_id, stu_id, grade</sub> (σ <sub>year = 2012 ∧ semester = 2</sub> (class ⋈ takes))
#### 4. 2012년 1학기에 '전산개론'을 가르친 교수의 이름은 무엇인가?
1. 년, 학기, 교수번호, 과목번호는 class에 교수번호, 교수이름은 professor에 과목명과 과목번호는 course에 있다.
3개의 테이블을 자연조인으로 엮어버리자. 어차피 교환, 결합 법칙이 성립되니까.
(class ⋈ professor ⋈ course)
2. 2012년 1학기인 동시에 '전산개론'인 레코드를 걸러내자.
σ <sub>year = 2012 ∧ semester = 1 ∧ title = '전산개론'</sub> (1번)
3. 교수 이름을 걸러내자.
π <sub>name</sub> (2번)
A4. π <sub>name</sub> (σ <sub>year = 2012 ∧ semester = 1 ∧ title = '전산개론'</sub> (class ⋈ professor ⋈ course))
#### 5. 교과목에는 존재하나 2012년 1학기에 개설되지 않은 교과목명은 무엇인가?
1. 크게보면 course에서 class를 빼야한다. 외래키는 course_id.
그렇다면 class에서 2012년 1학기에 개설되었던 수업의 course_id를 추려야한다.
π <sub>course_id</sub> (σ <sub>year = 2012 ∧ semester = 1</sub> (class))
2. 1과 같은 필드를 만들기 위해 course에서 course_id 필드만 남긴다.
π <sub>course_id</sub> (course)
3. course에서 class를 차집합한다.
(<2번> - <1번>)
4. (여기가 중요) 3번의 결과와 course를 자연조인하여 개설되지 않은 course의 테이블을 구한다.
(course ⋈ <3번>)
5. 4번 테이블에서 교과목명 필드만 추려낸다.
π <sub>title</sub> (4번)
A5. π <sub>title</sub> (course ⋈ (π <sub>course_id</sub> (course) - π <sub>course_id</sub> (σ <sub>year = 2012 ∧ semester = 1</sub> (class))))
#### 6. 가장 일찍 임용된 교수의 임용년도를 검색하라. (좀 어렵다..)
1. 교수 테이블을 temp라는 이름으로 복사한다.
ρ <sub>temp</sub> (professor)
2. professor와 temp를 카티션 프로덕트 연산한다.
(professor X <1번>)
3. 2번에서 professor의 임용년도가 temp의 임용년도보다 큰 레코드만 남긴다.(이러면 1997년 빼고 다나옴)
σ <sub>professor.year_emp > temp.year_emp</sub> (2번)
4. 3번의 레코드에서 임용년도 필드를 남긴다음,
π <sub>professor.year_emp</sub> (3번)
5. professor의 임용년도 필드를 남긴 테이블에서 차집합 해준다.
π <sub>year_emp</sub> (professor) - <4번>
A6. π <sub>year_emp</sub> (professor) - π <sub>professor.year_emp</sub> (σ <sub>professor.year_emp > temp.year_emp</sub> (professor X ρ <sub>temp</sub> (professor)))
<br>
<br>
> p75~ 연습문제
(진도 다 뺀 다음 풀거임...)
'Practice & Study > Database' 카테고리의 다른 글
Chap2. 관계형 데이터베이스 (0) | 2020.11.03 |
---|---|
Chap1. 데이터와 데이터베이스 (0) | 2020.11.03 |
information (0) | 2020.11.03 |