Есть ли установленное деление в SQL? - PullRequest
4 голосов
/ 21 сентября 2008

Я полностью осознаю, что деление множеств можно выполнить с помощью ряда других операций, поэтому мой вопрос:

Есть ли команда для разделения множеств в SQL?

Ответы [ 3 ]

5 голосов
/ 21 сентября 2008

http://vadimtropashko.files.wordpress.com/2007/02/ch3.pdf

со страницы 32:

Реляционное деление не является основным оператором. Это можно выразить в терминах проекции, декартового произведения и разности множеств.

Итак, нет. :)

2 голосов
/ 21 сентября 2008

Связанный вопрос: Дизайн базы данных для тегов

И соответствующая часть ответа эта статья

Короче говоря, нет, в SQL нет заданного деления.

1 голос
/ 07 мая 2011

Вот хорошее объяснение с использованием синтаксиса реляционной алгебры .

По заданным таблицам sailors, boats и reserves (примеры из "Системы управления базами данных" Ramakrishnan & Gehrke) вы можете вычислить моряков, которые зарезервировали все лодки по следующему запросу:

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)
);
...