Pular para o conteúdo principal

Questão de Banco de Dados — PL-SQL — FCC 2016

Banco de DadosPL-SQL
Código
fc033433
Banca
FCC
Órgão
TRT - 14ª Região (RO e AC)
Ano
2016
Nível
Médio
Cargo
Técnico Judiciário - Tecnologia da Informação
Utilizando subconsultas PL/SQL em um banco de dados Oracle 11g, aberto e em condições ideais, para um Técnico exibir o conteúdo dos campos nome, salario e id de todos os funcionários da tabela Funcionario cujo conteúdo do campo salario seja igual ao menor salário cadastrado, deverá utilizar o comando SELECT nome, salario, id FROM Funcionario
  1. AWHERE salario = (SELECT MIN(salario) FROM Funcionario);
  2. BINNER JOIN Funcionario ON salario = MIN(salario);
  3. CWHERE salario = MIN(salario) FROM Funcionario;
  4. DJOIN ON salario = (SELECT MIN(salario) FROM Funcionario);
  5. EWHERE salario = MIN(salario);
Revelar gabarito e comentário

GabaritoA — WHERE salario = (SELECT MIN(salario) FROM Funcionario);

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

Oracle 11g: Subconsultas para menor salário

Gabarito: letra A. Para exibir funcionários com salário igual ao menor salário cadastrado, a sintaxe correta utiliza uma subconsulta que retorna o valor mínimo com a função agregada MIN(), comparando-o na cláusula WHERE. A única alternativa que emprega essa estrutura corretamente é a letra A.

Alternativa

Comando

Correto?

Motivo

A

WHERE salario = (SELECT MIN(salario) FROM Funcionario)

Subconsulta retorna o menor salário; comparação correta no WHERE.

B

INNER JOIN Funcionario ON salario = MIN(salario)

MIN() não pode ser usado diretamente em condição de JOIN.

C

WHERE salario = MIN(salario) FROM Funcionario

MIN() sem subconsulta e FROM inválido dentro do WHERE.

D

JOIN ON salario = (SELECT MIN(salario) FROM Funcionario)

Sintaxe incompleta: falta tabela no JOIN; uso desnecessário.

E

WHERE salario = MIN(salario)

MIN() sem subconsulta; não permitido diretamente no WHERE.

Alternativa A — ✅ Correta ⟵ GABARITO

O comando WHERE salario = (SELECT MIN(salario) FROM Funcionario) usa uma subconsulta (expressão entre parênteses) que retorna o menor salário da tabela. A cláusula WHERE compara cada salário com esse valor único, devolvendo apenas os registros que o igualam. Tanto a sintaxe quanto a semântica estão perfeitas para o problema proposto.

Alternativa B — ❌ Incorreta

INNER JOIN Funcionario ON salario = MIN(salario) — a função MIN() é uma função de agregação que só pode aparecer em cláusulas HAVING ou na lista SELECT (com GROUP BY), nunca diretamente em uma condição de JOIN. Além disso, a junção da tabela consigo mesma não faz sentido aqui, pois não há referência a uma segunda tabela ou alias.

Alternativa C — ❌ Incorreta

WHERE salario = MIN(salario) FROM FuncionarioMIN() não pode ser usado diretamente no WHERE; precisa estar dentro de uma subconsulta (entre parênteses) para ser avaliado separadamente. A presença de FROM dentro da condição também é inválida – a cláusula FROM já foi declarada antes do WHERE.

Alternativa D — ❌ Incorreta

JOIN ON salario = (SELECT MIN(salario) FROM Funcionario) — a sintaxe está incompleta: falta a tabela a ser usada no JOIN (ex.: FROM Funcionario f1 JOIN Funcionario f2 ON ...). Mesmo que ajustada, o JOIN é desnecessário para este problema; uma simples subconsulta no WHERE é a abordagem correta.

Alternativa E — ❌ Incorreta

WHERE salario = MIN(salario) — erro semelhante ao da alternativa C: a função agregada MIN() não pode aparecer diretamente na condição WHERE sem estar encapsulada em uma subconsulta. O Oracle 11g exige que a função seja avaliada como uma consulta separada para retornar um único valor escalar.

PEGA ESSA DICA!

Em consultas que usam funções agregadas (como MIN, MAX, AVG) para filtrar registros, lembre-se de que elas não podem ficar soltas no WHERE. A solução é isolar a agregação dentro de uma subconsulta (SELECT MIN(coluna) FROM tabela) e comparar o resultado com o operador desejado (=, >, <, etc.). Esse padrão aparece frequentemente em provas de bancos de dados.

Gabarito: letra A

Link permanente: /questoes/fc033433