Pular para o conteúdo principal

Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2025

Banco de DadosSQL
Código
ce195366
Banca
CESPE / CEBRASPE
Órgão
BANRISUL
Ano
2025
Nível
Superior
Cargo
Técnico em Tecnologia da Informação II - Área: Administração de Banco de Dados
Em um sistema de biblioteca, existem três tabelas com as seguintes colunas.• livros: com um identificador único (id) para cada livro, o título do livro, um campo autor_id, que indica o autor que cadastrou o livro, um campo categoria_id, que indica a que categoria o livro pertence, e um campo booleano disponível para indicar se o livro está disponível para empréstimo (TRUE) ou não (FALSE).• autores: com um identificador único (id) para cada autor, e o nome do autor.• categorias: com um identificador único (id) para cada categoria, e o nome da categoria.Há uma relação implícita entre livros.autor_id e e e ntr e livros.categoria_id e categorias.id, de modo que, para um livro válido, deve existir um autor correspondente e uma categoria correspondente.A partir das informações precedentes, assinale a opção em que é corretamente apresentada a consulta SQL que permite a obtenção apenas dos livros cujo campo disponivel seja TRUE, desde que já existam registros correspondentes em autores e categorias, e, além disso, filtre somente os livros cuja categoria tenha o nome Ficção Científica, e apresente como resultado exatamente três colunas: título do livro, nome do autor e nome da categoria.
  1. ASELECT titulo, nome, nomeFROM livros lINNER JOIN autores a ON l.autor_id = a.idINNER JOIN categorias c ON l.categoria_id =c.idWHERE disponivel = TRUE AND c.nome = 'Ficção Científica';
  2. BSELECT l. titulo, a.nome, c.nomeFROM livros lLEFT JOIN autores aON l.autor_id = a.idLEFT JOIN categorias cON l.categoria_id = c.idWHERE l.disponivel = TRUEAND c.nome = 'Ficção Científica';
  3. CSELECT l.titulo, a.nome, c.nomeFROM livros l, autores a, categorias cWHERE l.autor_id = a.idAND l.categoria_id = c.idAND l.disponivel = TRUEAND c.nome LIKE '%Ficção Científica%';
  4. DSELECT l.titulo, a.nome, c.nomeFROM livros AS lINNER JOIN autores AS aON l.autor_id = a.idINNER JOIN categorias AS cON l.categoria_id = c.idWHERE l.disponivel = 'S'AND c.nome = 'Ficção Científica';
  5. ESELECT l.titulo, a.nome AS autor, c.nome AScategoriaFROM livros AS lINNER JOIN autores AS aON l.autor_id = a.idINNER JOIN categorias AS cON l.categoria_id = c.idWHERE l.disponivel = TRUEAND c.nome = 'Ficção Científica';
Revelar gabarito e comentário

GabaritoE — SELECT l.titulo, a.nome AS autor, c.nome AS categoria FROM livros AS l INNER JOIN autores AS a ON l.autor_id = a.id INNER JOIN categorias AS c ON l.categoria_id = c.id WHERE l.disponivel = TRUE AND c.nome = 'Ficção Científica';

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”.

Consulta SQL com JOINs e filtros

Gabarito: letra E. A alternativa E utiliza INNER JOIN para garantir a existência de autor e categoria correspondentes, filtra corretamente l.disponivel = TRUE (campo booleano) e c.nome = 'Ficção Científica' (igualdade exata), e renomeia as colunas com AS para exibir três colunas distintas: título, autor e categoria.

A questão testa o domínio de sintaxe SQL, especialmente:

  • Tipos de JOIN (INNER vs LEFT) e seu efeito na obrigatoriedade de registros relacionados.

  • Comparação de campos booleanos (TRUE/FALSE) vs string ('S').

  • Uso de LIKE para correspondência parcial vs igualdade exata.

  • Renomeação de colunas com alias (AS) para evitar colunas com nomes duplicados.

Alternativa

JOIN utilizado

Filtro booleano

Filtro categoria

Renomeação de colunas

Correto?

A

INNER JOIN

disponivel = TRUE

c.nome = 'Ficção Científica'

Não (colunas nome ambíguas)

B

LEFT JOIN

disponivel = TRUE

c.nome = 'Ficção Científica'

Sim (l.titulo, a.nome, c.nome)

C

Implícito (vírgulas)

disponivel = TRUE

c.nome LIKE '%Ficção Científica%'

Sim (l.titulo, a.nome, c.nome)

D

INNER JOIN

disponivel = 'S'

c.nome = 'Ficção Científica'

Não (colunas nome duplicadas)

E

INNER JOIN

disponivel = TRUE

c.nome = 'Ficção Científica'

Sim (AS autor, AS categoria)

Alternativa A — ❌ Incorreta

Seleciona titulo, nome, nome sem especificar a tabela de origem para a coluna nome, gerando ambiguidade (duas colunas chamadas nome). Além disso, falta alias nas colunas, resultando em nomes de coluna não descritivos. O JOIN está correto (INNER), mas a projeção está errada.

Alternativa B — ❌ Incorreta

Usa LEFT JOIN em ambas as junções, o que permite que livros sem autor ou categoria correspondente sejam incluídos (com NULL). O enunciado exige que existam registros correspondentes nas duas tabelas, o que exige INNER JOIN (ou equivalente). Além disso, a condição c.nome = 'Ficção Científica' no WHERE anula o LEFT JOIN para categorias (transforma em INNER), mas para autores ainda pode haver NULL, violando a exigência.

Alternativa C — ❌ Incorreta

A sintaxe implícita (FROM com vírgulas) funciona, mas a condição c.nome LIKE '%Ficção Científica%' permite correspondência parcial, enquanto o enunciado pede o nome exato "Ficção Científica". LIKE sem % garante igualdade, mas com % nas extremidades aceita nomes como "Ficção Científica e Fantasia", o que não é o solicitado. Deveria usar =.

Alternativa D — ❌ Incorreta

A condição l.disponivel = 'S' compara um campo booleano (TRUE/FALSE) com uma string 'S'. A forma correta é l.disponivel = TRUE. Além disso, não renomeia as colunas, então o resultado teria duas colunas chamadas "nome" (a.nome e c.nome), não atendendo à exigência de três colunas com nomes distintos.

Alternativa E — ✅ Correta ⟵ GABARITO

  • INNER JOIN garante que só livros com autor e categoria existentes sejam retornados.

  • l.disponivel = TRUE compara corretamente o campo booleano.

  • c.nome = 'Ficção Científica' faz correspondência exata.

  • l.titulo, a.nome AS autor, c.nome AS categoria projeta três colunas com nomes claros e distintos.

  • Sintaxe correta com AS e aliases.

Gabarito: letra E

Link permanente: /questoes/ce195366