
Divisão relacional não é uma operação nativa do ANSI SQL nem em seus diversos dialetos. Analise as alternativas abaixo, que se propõem a implementar corretamente a operação de divisão relacional R[Y,Z]÷S[Z]:
1) SELECT DISTINCT Y FROM R AS R1
WHERE NOT EXISTS
(SELECT * FROM S
WHERE NOT EXISTS
(SELECT * FROM R AS R2
WHERE (R1.Y=R2.Y) AND
(R2.Z=S.Z)));
WHERE NOT EXISTS
(SELECT * FROM S
WHERE NOT EXISTS
(SELECT * FROM R AS R2
WHERE (R1.Y=R2.Y) AND
(R2.Z=S.Z)));
2) SELECT Y FROM R,S
WHERE R.Z=S.Z
GROUP BY R.Y
HAVING
COUNT(R.Z)=(SELECT COUNT(Z) FROM S);
WHERE R.Z=S.Z
GROUP BY R.Y
HAVING
COUNT(R.Z)=(SELECT COUNT(Z) FROM S);
3) SELECT DISTINCT Y FROM R AS R1
WHERE NOT EXISTS
(SELECT * FROM S
WHERE S.Z NOT IN
(SELECT Z FROM R AS R2
WHERE (R1.Y=R2.Y) AND
(R2.Z=S.Z)));
WHERE NOT EXISTS
(SELECT * FROM S
WHERE S.Z NOT IN
(SELECT Z FROM R AS R2
WHERE (R1.Y=R2.Y) AND
(R2.Z=S.Z)));
4) SELECT DISTINCT Y FROM R AS R1
WHERE NOT EXISTS
(SELECT S.Z FROM S
WHERE S.Z not in
(SELECT R.Z FROM R
WHERE R.Y=R1.Y));
WHERE NOT EXISTS
(SELECT S.Z FROM S
WHERE S.Z not in
(SELECT R.Z FROM R
WHERE R.Y=R1.Y));
Estão corretas: