2장 관계형 데이터베이스 - 관계 대수 과제
11번 아래는 은행에 대한 정보를 저장하고 있는 데이터베이스이다. customer, branch, dposit 테이블은 각각 고객, 지점, 계좌에 관한 정보를 저장하고 있다.
customer (customer_id, name)
customer_id | name |
---|
100 | 박지성 |
101 | 박주영 |
102 | 기성용 |
103 | 이영표 |
104 | 차두리 |
branch (branch_name, address, phone)
branch_name | address | phone |
---|
A | 서울 | 02-201-2343 |
B | 천안 | 041-201-4367 |
C | NULL | 02-203-0932 |
deposit (deposit_num, customer_id, branch_name, balance)
deposit_num | customer_id | branch_name | balance |
---|
300 | 100 | A | 2000 |
301 | 100 | A | 3000 |
302 | 102 | A | 3000 |
303 | 103 | B | 5000 |
304 | 103 | B | 1000 |
305 | 103 | C | 2000 |
다음 질문에 답하라.
(a). 다음의 질의를 관계 대수로 표현하라.
1) 잔고(balance)가 2,000원 이상인 고객의 고객 번호와 (customer_id)와 계좌 번호(deposit_num)를 검색하라.
- π customer_id, deposit_num ( σ balance >= 2000 (deposit))
2) 잔고가 2,000원 이하인 계좌를 갖고 있는 고객의 이름을 검색하라.
- π name ( σ balance <= 2000 (customer ⋈ deposit )
3) 주소가 ‘서울’인 지점에서 예금계좌를 갖고 있는 고객의 이름을 검색하라.
- π name (σ address = ‘서울’ ( customer ⋈ deposit) ⋈ branch))
4) 계좌가 없는 고객의 이름을 검색하라.
- π name ( π customer_id (customer) - π customer_id (deposit) ) ⋈ customer )
5) 주소가 ‘서울’이 아닌 지점의 지점 이름을 검색하라.
- π address (σ address ≠ ‘서울’ ( customer ⋈ deposit) ⋈ branch))
6) 계좌 번호가 ‘300’인 계좌의 잔고보다 많은 잔고를 가진 계좌번호를 모두 검색하라. (관계 대수의 표현이 복잡할 경우 지정 연산자를 사용하라.)
- var_balance <- π balance ( σ deposit_num = ‘300’ (deposit) )
- π deposit_num ( σ balance > var_balance (deposit))
(b). 문제 (a)의 각 관계 대수에 대한 결과를 테이블로 나타내라
1)
deposit_num | customer_id |
---|
300 | 100 |
301 | 100 |
302 | 102 |
303 | 103 |
305 | 103 |
2)
3)
4)
5)
6)
(c) 문제 (a)의 5)번에서 주소가 ‘서울’이 아닌 지점에는 ‘C’가 표함되지 않는다. 그 이유는 무엇인가?
- NULL이란 필드에 대한 값을 알지 못하거나 아직 정해지지 않아 입력하지 못한 경우의 필드의 값으로, 그 값이 ‘서울’ 일 수도 그렇지 않을 수도 있기에, 검색 시 결과에서 제외된다.