Query:
Найдите имена моряков, забронировавших все лодки
Это можно представить в алгебре отношений следующим образом:
1. πsname ( ((σsid,bid Reserves) / (σbid Boats)) ⋈ Sailors)
Согласно реляционной алгебре, деление также может быть представлено с помощью оператора базовой алгебры следующим образом:
A/B= πx(A) - πx((πx(A) * B) - A )
Таким образом, если я convert
заявление 1
в соответствии с заявлением 2
тогда
Reserves/Boats= πsid(Reserves) - πsid(( πbid(Reserves) * Boats) - Reserves )
Как я могу представить Statement 3
в терминах SQL так же, как в алгебре отношений (т.е. без использования какого-либо оператора, кроме minus/Except(-) and Cross join(*)
).
Я пытаюсь добиться этого без использования условия NOT EXISTS and EXISTS
.
Схема таблиц следующая:Sailors
(sid: целое, sname: строка, rating: целое, age: real)Boats
(bid: целое, bname: строка, color: строка)Reserves
( sid: целое число, ставка: целое число, день: дата)