Pular para o conteúdo principal

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

Banco de DadosPL-SQL
Código
fc058921
Banca
FCC
Órgão
AL-AP
Ano
2020
Cargo
Analista Legislativo - Desenvolvedor de Banco de Dados
Em um ambiente Oracle, em condições ideais, um Analista precisa criar uma consulta para exibir o nome e o salário dos funcionários cujos números de departamento e salários correspondam a números de departamento e salários de funcionários que ganham comissão. Considerando que os campos usados na instrução existem na tabela colaboradores, a instrução PL/SQL correta que o Analista deve utilizar é:
  1. ASELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) HAVE comissao NOT NULL;
  2. BSELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) = (SELECT salario, idDepartamento FROM colaboradores WHERE comissao IS NOT NULL);
  3. CSELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) IN (SELECT salario, idDepartamento FROM colaboradores WHERE comissao IS NOT NULL);
  4. DSELECT nome, salario FROM colaboradores WHERE (comissão!=0 OR comissão IS NOT NULL);
  5. ESELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) IS (SELECT salario, idDepartamento FROM colaboradores WHERE comissao!=0);
Revelar gabarito e comentário

GabaritoC — SELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) IN (SELECT salario, idDepartamento FROM colaboradores WHERE comissao IS NOT NULL);

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

PL/SQL: Subconsultas com IN

Gabarito: letra C. A alternativa correta utiliza o operador IN com uma subconsulta que retorna os pares (salario, idDepartamento) dos funcionários que possuem comissão (comissao IS NOT NULL). Essa sintaxe permite comparar múltiplos valores de uma só vez, atendendo exatamente ao requisito de exibir funcionários cujo departamento e salário coincidam com os daqueles que ganham comissão.

A banca testa o conhecimento sobre operadores de comparação em SQL e o tratamento de subconsultas. O principal ponto de atenção é que o operador = só deve ser usado quando a subconsulta retorna um único valor; para múltiplos valores, o correto é IN.

Operador

Sintaxe

Funciona com múltiplos valores?

Uso correto no contexto

=

WHERE (col1, col2) = (subconsulta)

❌ Não (apenas valor único)

❌ Incorreto

IN

WHERE (col1, col2) IN (subconsulta)

✅ Sim

✅ Correto

IS

WHERE (col1, col2) IS (subconsulta)

❌ Não (sintaxe inválida)

❌ Incorreto

HAVE

WHERE (col1, col2) HAVE ...

❌ Não (cláusula inexistente)

❌ Incorreto

Condição simples

WHERE comissão!=0 OR comissão IS NOT NULL

❌ Não (não compara pares)

❌ Incorreto

Alternativa A — ❌ Incorreta

A cláusula HAVE não existe em SQL. O comando tenta usar HAVE comissao NOT NULL, o que é inválido. O correto seria usar WHERE comissao IS NOT NULL.

Alternativa B — ❌ Incorreta

Usa o operador = para comparar o par (salario, idDepartamento) com o resultado da subconsulta. Como a subconsulta pode retornar mais de uma linha, o = não é adequado. O = é para comparações que retornam um único valor escalar.

Alternativa C — ✅ Correta ⟵ GABARITO

A sintaxe WHERE (col1, col2) IN (subconsulta) é a forma correta de comparar um conjunto de colunas com múltiplos resultados de uma subconsulta. Aqui, a subconsulta seleciona salario e idDepartamento dos funcionários com comissão não nula, e o IN verifica se o par da linha atual está nesse conjunto.

Alternativa D — ❌ Incorreta

A condição (comissão!=0 OR comissão IS NOT NULL) não atende ao enunciado, que exige que os salários e departamentos correspondam aos de funcionários com comissão. Além disso, o operador != não é padrão SQL (o correto é <>), embora em alguns SGBDs seja aceito. A condição também filtra apenas por comissão, ignorando a comparação de departamento e salário.

Alternativa E — ❌ Incorreta

Utiliza IS no lugar de IN, o que é inválido. Além disso, a subconsulta usa comissao!=0 em vez de IS NOT NULL, o que não captura corretamente funcionários com comissão nula ou nula? Na verdade, comissao!=0 exclui valores nulos, pois nulo não é igual a zero, mas também não é diferente. O correto é IS NOT NULL para verificar se a comissão existe.

PEGA ESSA DICA!

Na hora da prova, lembre-se: subconsultas que podem retornar múltiplas linhas exigem operadores como IN, ANY ou ALL. O operador = (ou <>) só vale quando a subconsulta retorna exatamente um valor (escalar). Decore a diferença: =, >, < etc. com subconsulta exigem garantia de uma única linha; IN aceita várias.

Gabarito: letra C.

Link permanente: /questoes/fc058921