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 
    ) 
)
    原文作者:新手村的0级玩家
    原文地址: https://www.jianshu.com/p/b2792b955f07
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞