Existe divisão definida no SQL?
-
02-07-2019 - |
Pergunta
Estou plenamente ciente de que a divisão de set pode ser realizada através de uma série de outras operações, então minha pergunta é:
Existe um comando para a divisão Set no SQL?
Solução
http://vadimtropashko.files.wordpress.com/2007/02/ch3.pdf
Da página 32:
A divisão relacional não é um operador fundamental. Pode ser expresso em termos de projeção, produto cartesiano e diferença definida.
Então não. :)
Outras dicas
Pergunta relacionada: Design de banco de dados para marcação
E parte relevante da resposta é Este artigo
Então, em suma, não, não há divisão definida no SQL.
Aqui está uma boa explicação usando sintaxe de álgebra relacional.
Dadas tabelas sailors
, boats
e reserves
(Exemplos da Ramakrishnan & Gehrke "Sistemas de Gerenciamento de Database") Você pode calcular marinheiros que reservaram todos os barcos com a seguinte consulta:
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)
);