1. 除法運(yùn)算的定義:
給定關(guān)系R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運(yùn)算可以得到一個(gè)新的關(guān)系P(X),P是R中滿足下列條件的元組在X 屬性列上的投影: 元組在X上的分量值x的像集Y(x)包含S在Y上的投影的集合。
2.求解步驟過程:
第一步:找出關(guān)系R和關(guān)系S中相同的屬性,即Y屬性。在關(guān)系S中對Y做投影(即將Y列取出);
第二步:被除關(guān)系R中與S中不相同的屬性列是X,關(guān)系R在屬性X上做取消重復(fù)值的投影;
第三步:求關(guān)系R中X屬性對應(yīng)的像集Y;
第四步:判斷包含關(guān)系,R÷S其實(shí)就是判斷關(guān)系R中X各個(gè)值的像集Y是否包含關(guān)系S中屬性Y的所有值。
3.SQL中除法運(yùn)算的實(shí)現(xiàn)
R(X,Y)÷S(Y,Z)的運(yùn)算用結(jié)構(gòu)化語言SQL 語句可表達(dá)為下列形式:
select distinct R.X from R R1
where not exists
(
select S.Y from S
where not exists
(
select * from R R2
where R2.X=R1.X and R2.Y=S.Y
)
)
4.例如下面的“完成”和“DB項(xiàng)目”和它們的除法:

下面說說我自己的理解,如何通過關(guān)系代數(shù)的除法,得到最后的完成÷DB項(xiàng)目
完成(Student,Task)=R(X,Y)
DB項(xiàng)目(Task)=S(Y)
第一步:排除R(X,Y)中Y列中不包含S(Y)的行,得到:
| Student | Task |
|---|---|
| Fred | Database1 |
| Fred | Database2 |
| Eugene | Database1 |
| Sara | Database1 |
| Sara | Database2 |
第二步:找出存在R(X,Y)中沒有S(Y)中的項(xiàng),即未完全包含S(Y)中的列元素,得到:
| Student | Task |
|---|---|
| Eugene | Database1 |
第三步:排除R(X,Y)中,第二步中得到的行.即:
| Student | Task |
|---|---|
| Fred | Database1 |
| Fred | Database2 |
| Sara | Database1 |
| Sara | Database2 |
第四步:得到R(X).即:
| Student |
|---|
| Fred |
| Fred |
| Sara |
| Sara |
第五步:消除重復(fù).即:
| Student |
|---|
| Fred |
| Sara |
即得到最后結(jié)果:

參考文章:
新手村的0級玩家的文章:SQL語句實(shí)現(xiàn)關(guān)系代數(shù)中的“除法”
維基百科:關(guān)系代數(shù)-除法