Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2025
Banco de Dados›Banco de Dados Relacionais
Código
fg121828
Banca
FGV
Órgão
TCE-RR
Ano
2025
Nível
Superior
Cargo
Analista Administrativo - Tecnologia da Informação, com especialidade em Banco de Dados
O código DDL abaixo cria três tabelas em um banco de dados relacional:CREATE TABLE Velejadores (vid INTEGER PRIMARY KEY,nome VARCHAR(100),idade INTEGER);CREATE TABLE Barcos (bid INTEGER PRIMARY KEY,nome VARCHAR(50),modelo VARCHAR(50));CREATE TABLE Reservas (vid INTEGER,bid INTEGER,data DATE,PRIMARY KEY (vid, bid),FOREIGN KEY (vid) REFERENCES Velejadores(vid),FOREIGN KEY (bid) REFERENCES Barcos(bid));Considerando as tabelas acima, a seguinte consulta foi realizada:SELECT V.nome FROM Velejadores VWHERE NOT EXISTS ((SELECT B.bid FROM Barcos B)EXCEPT(SELECT R.bid FROM Reservas RWHERE R.vid = V.vid));O retorno da consulta foram os nomes
Ados velejadores que possuem reservas para todos os barcos.
Bdos barcos que não possuem reservas.
Cdos velejadores que não possuem reservas.
Ddos velejadores que possuem reserva para mais de um barco.
Edos barcos que possuem reservas feitas por todos os velejadores.
Revelar gabarito e comentário▾
GabaritoA — dos velejadores que possuem reservas para todos os barcos.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
SQL: Subconsultas com EXISTS e EXCEPT
Gabarito: letra A. A consulta retorna os nomes dos velejadores que possuem reservas para todos os barcos. A subconsulta dentro do NOT EXISTS calcula, para cada velejador V, a diferença entre o conjunto de todos os barcos e o conjunto de barcos que ele reservou. Se essa diferença é vazia, significa que o velejador reservou todos os barcos.
Análise lógica
SELECT V.nome FROM Velejadores V
WHERE NOT EXISTS (
(SELECT B.bid FROM Barcos B)
EXCEPT
(SELECT R.bid FROM Reservas R WHERE R.vid = V.vid)
);
O EXCEPT retorna os bid que estão no primeiro conjunto e não no segundo.
O NOT EXISTS é verdadeiro quando o resultado do EXCEPT é vazio.
Portanto, a condição seleciona os velejadores para os quais não existe barco que não tenha sido reservado por ele.
NÃO CAIA NESSA!
Cuidado com a dupla negação. NOT EXISTS (A EXCEPT B) equivale a "todos os elementos de A estão em B". A alternativa B (velejadores sem reservas) e C (barcos sem reservas) são distratores comuns que invertem a lógica.
1Para cada velejador V
2Calcula: todos os barcos
3Menos os que V reservou
4Resultado vazio?
5[+] Sim → V reservou todos
LEVEL · soulevel.com.br
Alternativas
Alternativa A — ✅ Correta ⟵ GABARITO
Exatamente o que a consulta retorna: velejadores que reservaram todos os barcos.
Alternativa B — ❌ Incorreta
A consulta retorna nomes de velejadores, não de barcos. Além disso, a lógica exige reservas para todos os barcos, não ausência de reservas.
Alternativa C — ❌ Incorreta
Velejadores sem nenhuma reserva seriam aqueles cujo conjunto de reservas é vazio. Nesse caso, o EXCEPT retornaria todos os barcos, fazendo o NOT EXISTS ser falso. Portanto, eles não são selecionados.
Alternativa D — ❌ Incorreta
A consulta exige reservas para todos os barcos, não apenas para mais de um.
Alternativa E — ❌ Incorreta
A consulta retorna nomes de velejadores, não de barcos. A lógica aqui seria o inverso: para cada barco, verificar se todos os velejadores o reservaram, o que não é o caso.