微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将聚合运算符从SQL转换为关系代数

我写了几个我要转换为关系代数的SQL查询.但是,有些查询使用聚合运算符,我不知道如何转换它们.值得注意的是,他们使用COUNT和GROUP BY .. HAVING运算符.

这是架构:

水手(sid,sname,评级)
储备(sid,出价,价格)
船(bid,bname)

这是我正在做的一个例子:找到正好由2名水手保留的所有船只的出价和名字.

SELECT B.bid,B.bname
FROM Boats B,Reserves R
WHERE B.bid = R.bid
GROUP BY R.bid
HAVING 2 = (SELECT COUNT(*)
FROM Reserves R2
WHERE R2.bid = B.bid);

允许的关系代数运算:选择,投影,连接,条件连接,重命名,并集,交集,交叉积,除法

解决方法

这只是答案的一半……

可以使用条件连接和投影找到关系“由两个或更多水手保留的船只”,它们都在您允许的操作集中:

SELECT disTINCT R1.bid
  FROM Reserves AS R1 
       JOIN Reserves AS R2
          ON R1.bid = R2.bid
             AND R1.sid < R2.sid;

可以使用条件连接(两次)和投影找到关系“由三个或更多水手保留的船只”,它们都在您允许的操作集中:

SELECT disTINCT R1.bid
  FROM Reserves AS R1
       JOIN Reserves AS R2
          ON R1.bid = R2.bid
             AND R1.sid < R2.sid
       JOIN Reserves AS R3
          ON R1.bid = R3.bid
          AND R2.sid < R3.sid;

如果我们有减号运算符,例如标准sql中除外:

SELECT disTINCT R1.bid
  FROM Reserves AS R1 
       JOIN Reserves AS R2
          ON R1.bid = R2.bid
             AND R1.sid < R2.sid
EXCEPT
SELECT disTINCT R1.bid
  FROM Reserves AS R1
       JOIN Reserves AS R2
          ON R1.bid = R2.bid
             AND R1.sid < R2.sid
       JOIN Reserves AS R3
          ON R1.bid = R3.bid
          AND R2.sid < R3.sid;

如果我们有限制(sql中的WHERE)和半差异(a.k.a. antijoin)运算符(例如sql中的NOT IN):

SELECT disTINCT R1.bid
  FROM Reserves AS R1 
       JOIN Reserves AS R2
          ON R1.bid = R2.bid
             AND R1.sid < R2.sid
 WHERE R1.bid NOT IN (
                      SELECT disTINCT R1.bid
                        FROM Reserves AS R1
                             JOIN Reserves AS R2
                                ON R1.bid = R2.bid
                                   AND R1.sid < R2.sid
                             JOIN Reserves AS R3
                                ON R1.bid = R3.bid
                                AND R2.sid < R3.sid
                     );

…但您的允许操作集不包括限制,半差或减:(

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐