Na linguagem SQL, não existe a operação de divisão relaciona...

Próximas questões
Com base no mesmo assunto
Q762266 Banco de Dados
Na linguagem SQL, não existe a operação de divisão relacional da álgebra relacional. Analise as tentativas de se implementar a divisão relacional, usando outros recursos da SQL e atribua V para as tentativas que funcionam e F para as que não funcionarem – seja por estarem logicamente erradas, seja por causarem erros de compilação ou execução. ( ) select Y from R where X in ( select X from S ) group by Y having count(*) = ( select count(*) from S );
( ) select distinct a.Y from R as a where not exists ( select * from S as b where not exists (
select * from R as c where (c.Y=a.Y) and (c.X=b.X) ) );
( ) select P.Y from R as P, S as T where P.X = T.X group by P.Y having count(P.Y) = (select count(X) from S); A sequência das atribuições, de cima para baixo, é:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: E - V, V, V.

Para resolver questões como essa, é crucial entender o conceito de divisão relacional em álgebra relacional e como simular essa operação em SQL. A divisão relacional é usada para encontrar tuplas em uma relação que possuem uma correspondência com todas as tuplas em outra relação. Em outras palavras, queremos encontrar elementos na tabela R que estão relacionados com todos os elementos da tabela S em um determinado atributo.

Vamos verificar o porquê de a Alternativa E estar correta:

  • O primeiro comando SQL faz uma seleção dos registros da coluna Y de R onde todos os valores de X que existem em S também estão em R. O 'group by' e o 'having count(*)' garantem que apenas as Y que correspondem a todas as entradas de X em S sejam selecionadas, simulando a operação de divisão.
  • O segundo comando usa uma abordagem diferente, com subconsultas correlatas e o operador 'exists'. Aqui, procura-se por todos os Y em R onde não existe nenhum X em S que não esteja também relacionado com esse Y em R. Isso efetivamente captura o resultado da divisão relacional.
  • O terceiro comando também se assemelha a uma divisão, mas faz isso através de uma junção e contagem. Seleziona-se Y de R, juntando-se com S onde os valores de X são iguais, e agrupando-se por Y. O 'having count(P.Y)' compara com a quantidade total de registros em S, garantindo que apenas os Y relacionados com todos os X de S sejam selecionados.

Portanto, todas as três tentativas de simulação da divisão relacional estão corretas e funcionariam como esperado em SQL, por isso a Alternativa E é a correta.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

http://www.itnerante.com.br/profiles/blogs/divis-o-relacional-part-i

 

http://www.itnerante.com.br/profiles/blogs/divis-o-relacional-parte-ii

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo