Givet denne DDL for tabeller, der svarer til dine relevante relationer:
create table Boats(
bid int,
bname varchar(50),
color varchar(50)
);
create table Reserves(
sid int,
bid int,
day date
);
Du kan translitterere divisionsformlen (3) til Oracle SQL-syntaks ret ligetil, selvom den er ordrig:
-- 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
Som specificeret bruger det kun CROSS JOIN
og MINUS
operationer, således at de svarer direkte til den relationelle algebraformel. I en databaseapplikation i den virkelige verden ville man dog helt sikkert opnå det samme resultat via en helt anden forespørgsel.
Bemærk også, at SQL-databaser kan og gør krænke princippet om formel relationel algebra om, at relationer ikke indeholder duplikerede tupler. Det er grunden til SELECT DISTINCT
i den første underforespørgsel. Distinkt valg anvendt strategisk andre steder i forespørgslen kan gøre det mere effektivt, men vil ikke ændre resultatet.