Native Relational Operations (Cont.)
Division
Assume Head(R)=A1…An B1…Bm, and Head(S)=B1…Bm.
The table T is the result of the division R÷S if
Head(T)=A1…An and
T contains exactly those rows t such that for every row s in S, the row resulting from concatenating t and s can be found in table R.
| R |
| A |
B |
C |
| a1 |
b1 |
c1 |
| a2 |
b1 |
c1 |
| a1 |
b2 |
c1 |
| a1 |
b2 |
c2 |
| a2 |
b1 |
c2 |
| a1 |
b2 |
c3 |
| a1 |
b2 |
c4 |
| a1 |
b1 |
c5 |
|
|
|
⇒
T1:=R÷S1
|
|
|
|
|
⇒
T2:=R÷S2
|
|
Given
T=R÷S, it is not always true that
R=T×S.
However,
T contains the
largest possible set of rows such that
T×S⊆R.
Query:
List product numbers for products ordered by customer c006.
PC6 := (ORDER where cid='c006')[pid]
|
⇒
|
|
Query:
Find the customers have placed orders for all these products.
CP := ORDER[cid, pid]
T := CP ÷ PC6
|
⇒
|
|
A dream doesn’t become reality through magic;
it takes sweat, determination and hard work.
— Colin Powell
|