Mengingat DDL ini untuk tabel yang sesuai dengan relasi Anda yang relevan:
create table Boats(
bid int,
bname varchar(50),
color varchar(50)
);
create table Reserves(
sid int,
bid int,
day date
);
Anda dapat mentransliterasikan rumus pembagian (3) ke dalam sintaks Oracle SQL dengan cukup mudah, meskipun bertele-tele:
-- 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
Seperti yang ditentukan, itu hanya menggunakan CROSS JOIN
dan MINUS
operasi, sehingga sesuai langsung dengan rumus aljabar relasional. Namun, dalam aplikasi database dunia nyata, seseorang pasti akan mendapatkan hasil yang sama melalui kueri yang sama sekali berbeda.
Perhatikan juga bahwa database SQL dapat dan memang melanggar prinsip aljabar relasional formal bahwa relasi tidak mengandung tupel duplikat. Itulah alasan untuk SELECT DISTINCT
pada subquery pertama. Pemilihan berbeda yang diterapkan secara strategis di tempat lain dalam kueri mungkin membuatnya lebih efisien, tetapi tidak akan mengubah hasilnya.