我完全知道集合划分可以通过一系列其他操作来完成,所以我的问题是:
SQL中有设置除法的命令吗?
http://vadimtropashko.files.wordpress.com/2007/02/ch3.pdf
从第 32 页开始:
关系除法不是基本运算符。它可以用投影、笛卡尔积和集差来表示。
所以不行。:)
给定表sailors
,boats
并且reserves
(来自 Ramakrishnan 和 Gehrke 的“数据库管理系统”的示例),您可以使用以下查询计算已预订所有船只的水手:
SELECT name FROM sailors
WHERE Sid NOT IN (
-- A sailor is disqualified if by attaching a boat,
-- we obtain a tuple <sailor, boat> that is not in reserves
SELECT s.Sid
FROM sailors s, boats b
WHERE (s.Sid, b.Bid) NOT IN (
SELECT Sid, Bid FROM reserves
)
);
-- Alternatively:
SELECT name FROM sailors s
WHERE NOT EXISTS (
-- Not reserved boats
(SELECT bid FROM boats)
EXCEPT
(SELECT r.bid FROM reserves r
WHERE r.sid = s.sid)
);