Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas e Comandos em SQL
Código
fg165293
Banca
FGV
Órgão
DATAPREV
Ano
2024
Cargo
Ana TI ( )

ATENÇÃO:

 

O texto a seguir deve ser usado para a próxima questão.

 

O esquema de um banco de dados relacional, especificado pelos comandos SQL a seguir, atenderá às consultas

 

create table candidato
(
    num_inscr    int         primary key,
    cpf_cand     char(11)    unique,
    nome         varchar(30)
);

create table questao
(
    id           int         primary key,
    texto        varchar(20) not null,
    gabarito     char(1)     check (gabarito in ('A','B','C','D','E'))
);

create table candidato_questao
(
    num_cand     int,
    cpf_cand     char(11),
    id_quest     int,
    opcao_mar    char(1),
    primary key(num_cand,id_quest),
    unique(cpf_cand,id_quest),
    foreign key(num_cand) references candidato,
    foreign key(cpf_cand) references candidato(cpf_cand),
    foreign key(id_quest) references questao
);

 

Considere a execução dos comandos SQL a seguir:

 

insert into candidato values
(1,'111','Ferreira'),(2,'333','Andrade'),
(3,'555','Verçosa'),(4,'222','Bastos'),
(5,'444','Lavor');

 

select nome from candidato
where nome like '__r%'
order by num_inscr asc

 

 

Assinale a opção que apresenta a ordem correta dos nomes impressos pelo comando SELECT.

  1. A‘Andrade’, ‘Ferreira’ e ‘Verçosa’.
  2. B‘Ferreira’ e ‘Andrade’.
  3. C‘Ferreira’ e ‘Verçosa’.
  4. D‘Lavor’.
  5. E‘Verçosa’ e ‘Ferreira’.
Revelar gabarito e comentário

GabaritoC — ‘Ferreira’ e ‘Verçosa’.

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

Operador LIKE e curingas no SQL

Gabarito: letra C — 'Ferreira' e 'Verçosa'. O comando SELECT filtra os nomes que possuem exatamente dois caracteres antes da letra 'r' (padrão '__r%'), e a cláusula ORDER BY num_inscr asc ordena o resultado pelo número de inscrição em ordem crescente. Apenas 'Ferreira' (num_inscr=1) e 'Verçosa' (num_inscr=3) atendem ao padrão, e nessa ordem.

O operador LIKE é usado em SQL para comparar uma string com um padrão, utilizando dois curingas principais: o % (porcentagem) e o _ (sublinhado). O % representa qualquer sequência de caracteres (inclusive nenhum), enquanto o _ representa exatamente um caractere qualquer. No padrão '__r%', temos dois sublinhados seguidos da letra 'r' e depois um %. Isso significa que a string deve começar com dois caracteres quaisquer, seguidos da letra 'r', e depois pode ter qualquer coisa (inclusive nada).

Vamos aplicar isso aos nomes da tabela candidato:

  • 'Ferreira': F-e-r-r-e-i-r-a → os dois primeiros caracteres são 'F' e 'e', o terceiro é 'r' → atende ao padrão.

  • 'Andrade': A-n-d-r-a-d-e → os dois primeiros são 'A' e 'n', o terceiro é 'd' → não atende.

  • 'Verçosa': V-e-r-ç-o-s-a → os dois primeiros são 'V' e 'e', o terceiro é 'r' → atende.

  • 'Bastos': B-a-s-t-o-s → os dois primeiros são 'B' e 'a', o terceiro é 's' → não atende.

  • 'Lavor': L-a-v-o-r → os dois primeiros são 'L' e 'a', o terceiro é 'v' → não atende.

Portanto, apenas 'Ferreira' e 'Verçosa' são selecionados. A cláusula ORDER BY num_inscr asc ordena pelo número de inscrição: 'Ferreira' tem num_inscr = 1 e 'Verçosa' tem num_inscr = 3. Logo, a ordem correta é 'Ferreira' primeiro e 'Verçosa' depois.

A pegadinha clássica dessa questão é confundir o curinga _ com o %. O _ casa exatamente um caractere, enquanto o % casa zero ou mais. Se o padrão fosse '%r%', todos os nomes que contêm a letra 'r' em qualquer posição seriam retornados (Ferreira, Andrade, Verçosa, Lavor). Mas com '__r%', a letra 'r' deve ser o terceiro caractere obrigatoriamente. Outra pegadinha é inverter a ordem de classificação: o ORDER BY é asc (crescente), não desc (decrescente).

Guarde a diferença entre os curingas: _ = um caractere, % = vários (ou nenhum). É exatamente nessa distinção que as alternativas se dividem.

  1. 12 caracteres quaisquer (_)
  2. 23º caractere = 'r'
  3. 3Depois, qualquer coisa (%)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Inclui 'Andrade', que não atende ao padrão '__r%' porque a letra 'r' não é o terceiro caractere do nome (em 'Andrade', o terceiro é 'd'). O candidato que marca esta opção provavelmente confundiu o _ com %, achando que bastaria conter a letra 'r' em qualquer posição.

Alternativa B — ❌ Incorreta

Lista 'Ferreira' e 'Andrade', mas 'Andrade' não atende ao padrão. Além disso, omite 'Verçosa', que deveria ser incluída. O erro aqui é duplo: incluir quem não deve e excluir quem deve.

Alternativa C — ✅ Correta ⟵ GABARITO

'Ferreira' (num_inscr=1) e 'Verçosa' (num_inscr=3) são os únicos nomes que têm a letra 'r' como terceiro caractere. A ordenação por num_inscr asc coloca 'Ferreira' antes de 'Verçosa'. A alternativa espelha exatamente o resultado da consulta.

Alternativa D — ❌ Incorreta

'Lavor' não atende ao padrão '__r%': o terceiro caractere é 'v', não 'r'. Quem marca esta opção provavelmente contou os caracteres de forma errada ou confundiu a posição da letra 'r'.

Alternativa E — ❌ Incorreta

Inverte a ordem de classificação: coloca 'Verçosa' antes de 'Ferreira'. O ORDER BY num_inscr asc exige que o menor número venha primeiro (1 antes de 3), então 'Ferreira' deve aparecer antes. A banca explora aqui o descuido com a direção da ordenação.

NÃO CAIA NESSA!

A banca troca o curinga _ (um caractere) pelo % (vários caracteres) e inverte a ordem do ORDER BY. No padrão '__r%', a letra 'r' é obrigatoriamente o terceiro caractere — não basta o nome conter 'r'. E o asc significa crescente: o menor num_inscr vem primeiro. Com treino, você enxerga essas trocas de longe 💪

PEGA ESSA DICA!

Para resolver questões com LIKE, escreva o padrão e teste caractere por caractere em cada nome. Conte os _ (cada um = 1 posição) e veja onde o % começa (a partir dali, qualquer coisa vale). Depois, aplique o ORDER BY na ordem pedida — asc ou desc — e confira a sequência final.

Gabarito: letra C

Link permanente: /questoes/fg165293