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
         
    |