Есть ли разделение в SQL?
-
02-07-2019 - |
Вопрос
Я полностью осознаю, что деление множества можно выполнить с помощью ряда других операций, поэтому мой вопрос:
Есть ли в SQL команда для разделения множества?
Решение
http://vadimtropashko.files.wordpress.com/2007/02/ch3.pdf
Со страницы 32:
Реляционное деление не является фундаментальным оператором.Его можно выразить через проекцию, декартово произведение и разность множеств.
Так что нет.:)
Другие советы
Связанный вопрос: Проектирование базы данных для маркировки
И соответствующая часть ответа Эта статья
Короче говоря, нет, в SQL нет разделения множеств.
Вот хорошее объяснение с использованием синтаксиса реляционной алгебры.
Данные таблицы sailors
, boats
и reserves
(примеры из «Системы управления базами данных» Рамакришнана и Герке) вы можете вычислить моряков, зарезервировавших все лодки, с помощью следующего запроса:
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)
);