FC ConcursosFC Concursos

Questão FC369451

Considere o esquema relacional a seguir, implementado em SQL. create table recurso ( id integer primary key, nome varchar(20) not null, valor real ); create table projeto ( id inte

Linguagem SQL

FGV · 2024

Considere o esquema relacional a seguir, implementado em SQL.

 

create table recurso

(

id integer primary key,

nome varchar(20) not null,

valor real

);

create table projeto

(

id integer primary key,

nome varchar(20) not null,

verba real

);

create table alocacao

(

id_recurso integer,

id_projeto integer,

primary key(id_recurso,id_projeto),

foreign key(id_recurso) references recurso,

foreign key(id_projeto) references projeto

);

 

Assinale a opção que apresenta a consulta que gera como resultado de execução uma lista com o nome dos recursos alocados em todos os projetos cadastrados.

  1. select r.nome from recurso r
  2. select r.nome from recurso r where not exists (select 1 from alocacao a where a.id_recurso=r.id )
  3. select r.nome from recurso r where r.valor>(select avg(valor) from recurso)
  4. select r.nome from recurso r where not exists (select 1 from projeto p where not exists (select 0 from alocacao a where a.id_recurso=r.id and a.id_projeto=p.id ) )
  5. select r.nome from recurso r where exists (select 1 from alocacao a where a.id_recurso=r.id )
Mostrar resposta e comentário

Gabarito

D

Comentário do professor

Essa consulta usa o padrão de dupla negação com not exists para expressar a ideia de "alocado em todos os projetos".

Começa por selecionar os nomes em recurso (r): select r.nome from recurso r.

O primeiro not exists envolve uma subconsulta sobre projeto (p) que busca se existe algum projeto que viole a condição.

Dentro dela há outro not exists que verifica, para cada projeto p, a existência de uma linha em alocacao onde r.id está ligado a p.id (correlação entre as consultas).

Assim: o recurso é retornado somente se não existir nenhum projeto para o qual não haja alocação desse recurso — ou seja, está alocado em todos os projetos.

Observação: os valores literais em select 1 ou select 0 são irrelevantes; servem apenas para testar existência.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo