1. 程式人生 > >SQL語句實現關係代數中的“除法”

SQL語句實現關係代數中的“除法”

1. 除法運算的定義:

給定關係R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運算可以得到一個新的關係P(X),P是R中滿足下列條件的元組在X 屬性列上的投影: 元組在X上的分量值x的像集Y(x)包含S在Y上的投影的集合。

2.求解步驟過程:

第一步:找出關係R和關係S中相同的屬性,即Y屬性。在關係S中對Y做投影(即將Y列取出);

第二步:被除關係R中與S中不相同的屬性列是X,關係R在屬性X上做取消重複值的投影;

第三步:求關係R中X屬性對應的像集Y;

第四步:判斷包含關係,R÷S其實就是判斷關係R中X各個值的像集Y是否包含關係S中屬性Y的所有值。

3.SQL中除法運算的實現

R(X,Y)÷S(Y,Z)的運算用結構化語言SQL 語句可表達為下列形式:

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 
    ) 
)