2008-09-21 4 views
5

Je suis pleinement conscient que la division d'ensemble peut être accomplie par une série d'autres opérations, donc ma question est:Existe-t-il une division en SQL?

Existe-t-il une commande pour définir la division en SQL?

+0

Pouvez-vous préciser ce que vous entendez par définir la division? Voulez-vous dire des choses comme l'intersection? –

+0

En outre, parlez-vous de SQL ANSI, ou l'implémentation d'un fournisseur particulier de SQL? –

Répondre

1

Here is a nice explanation using relational algebra syntax.

Compte tenu des tables sailors, boats et reserves (exemples de Ramakrishnan & de Gehrke « Database Management Systems »), vous pouvez calculer les marins qui ont réservé tous les bateaux avec la requête suivante:

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) 
); 
+0

J'ai audité la classe Intro de Gehrke et je peux confirmer que tous les exemples étaient nautiques :) –