Esiste una divisione impostata in SQL?
-
02-07-2019 - |
Domanda
Sono pienamente consapevole che la divisione set può essere realizzata attraverso una serie di altre operazioni, quindi la mia domanda è:
Esiste un comando per impostare la divisione in SQL?
Soluzione
http://vadimtropashko.files.wordpress.com/2007/02/ ch3.pdf
Da pagina 32:
La divisione relazionale non è un operatore fondamentale. Può essere espresso in termini di proiezione, prodotto cartesiano e stabilire la differenza.
Quindi no. :)
Altri suggerimenti
Domanda correlata: Progettazione di database per l'etichettatura
E la parte rilevante della risposta è questo articolo
Quindi in breve, no, non esiste una divisione set in SQL.
Ecco una bella spiegazione usando la sintassi dell'algebra relazionale .
Date le tabelle marinai
, barche
e riserve
(esempi da Ramakrishnan & amp; Gehrke's " Database Management Systems ") puoi calcolare i marinai che hanno prenotato tutte le barche con la seguente query:
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)
);