Предвид този DDL за таблици, съответстващи на вашите съответни релации:
create table Boats(
bid int,
bname varchar(50),
color varchar(50)
);
create table Reserves(
sid int,
bid int,
day date
);
Можете да транслитерирате формулата за деление (3) в синтаксиса на Oracle SQL доста лесно, въпреки че е многословна:
-- All sailors who reserved at least one boat
SELECT DISTINCT sid
FROM Reserves
MINUS
-- All sailors who reserved at least one boat, but not all of them
SELECT sid
FROM (
-- all combinations of a sailor who reserved any boat with any boat
-- available to be reserved:
SELECT Reserves.sid, Boats.bid
FROM
Reserves
CROSS JOIN
Boats
MINUS
-- all combinations of sailor and boat for actual reservations made
SELECT sid, bid
FROM Reserves
) sids
Както е посочено, това използва само CROSS JOIN
и MINUS
операции, така че да съответства директно на формулата на релационната алгебра. В приложение за база данни от реалния свят обаче човек със сигурност ще получи същия резултат чрез напълно различна заявка.
Обърнете внимание също, че SQL базите данни могат и наистина нарушават принципа на формалната релационна алгебра, че отношенията не съдържат дублиращи се кортежи. Това е причината за SELECT DISTINCT
в първата подзаявка. Различният избор, приложен стратегически другаде в заявката, може да я направи по-ефективна, но няма да промени резултата.