Questão de Banco de Dados — Oracle — CESPE / CEBRASPE 2024
Banco de Dados›Oracle
Código
ce403627
Banca
CESPE / CEBRASPE
Órgão
MPE GO
Ano
2024
Cargo
Ana MP ( )
Considerando a tabela precedente, que representa um banco de dados relacional ORACLE, julgue o próximo item.
O select a seguir retornará o valor 70. select max(cod_carreira) FROM eg.EGT_CARREIRA ec WHERE DES_CARREIRA LIKE 'a%'
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
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 – Função MAX e filtro LIKE no Oracle
Gabarito: Errado. A consulta SELECT MAX(cod_carreira) FROM eg.EGT_CARREIRA ec WHERE DES_CARREIRA LIKE 'a%' retorna o maior valor de cod_carreira apenas entre as linhas cuja coluna DES_CARREIRA começa com a letra 'a' (maiúscula ou minúscula, dependendo da configuração de case-sensitivity do banco). Como a tabela apresentada na imagem não possui nenhuma linha com DES_CARREIRA iniciando em 'a', o resultado da consulta será NULL, e não 70. A função MAX ignora valores nulos, mas se nenhuma linha for selecionada, o resultado é NULL.
A questão cobra o entendimento de duas cláusulas SQL: WHERE com LIKE e a função de agregação MAX. O LIKE 'a%' filtra as linhas onde o valor da coluna DES_CARREIRA começa com a letra 'a'. O % é um curinga que representa qualquer sequência de caracteres (inclusive vazia). Portanto, a condição seleciona apenas as linhas cujo texto começa com 'a'. Na tabela fornecida, os valores de DES_CARREIRA são: 'Analista de Sistemas', 'Programador', 'DBA', 'Analista de Redes' e 'Suporte Técnico'. Nenhum deles começa com 'a' (considerando case-sensitive, 'Analista' começa com 'A' maiúsculo, que é diferente de 'a' minúsculo; em bancos com collation case-insensitive, 'Analista' seria selecionado). Independentemente da interpretação de case, a questão afirma que retornará 70, mas o valor máximo de cod_carreira entre as linhas que começam com 'a' (se houver) seria 10 (Analista de Sistemas) ou 40 (Analista de Redes), nunca 70. O valor 70 corresponde ao cod_carreira da linha 'Suporte Técnico', que não começa com 'a'. Portanto, a afirmação está incorreta.
A pegadinha da banca está em induzir o candidato a considerar o MAX de toda a tabela, ignorando o filtro WHERE. O MAX é aplicado APÓS o filtro, ou seja, apenas sobre as linhas que atendem à condição. Se o filtro não seleciona nenhuma linha, o MAX retorna NULL. Mesmo que houvesse linhas começando com 'a', o valor máximo seria o maior cod_carreira entre elas, não o maior da tabela inteira.
Para fixar: a ordem lógica de execução de uma consulta SQL é: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. As funções de agregação (MAX, MIN, SUM, AVG, COUNT) são aplicadas na fase SELECT, após o WHERE já ter filtrado as linhas. Portanto, o MAX nunca considera linhas que foram excluídas pelo WHERE.
1FROM
2WHERE
3GROUP BY
4HAVING
5SELECT (MAX)
6ORDER BY
LEVEL · soulevel.com.br
Item — ❌ Errado
A afirmação de que a consulta retornará 70 é falsa. O filtro WHERE DES_CARREIRA LIKE 'a%' restringe a análise apenas às linhas cuja descrição começa com 'a'. Na tabela, nenhuma linha atende a esse critério (considerando case-sensitive, 'Analista' começa com 'A' maiúsculo, não 'a'; em case-insensitive, 'Analista de Sistemas' e 'Analista de Redes' seriam selecionados, mas seus cod_carreira são 10 e 40, respectivamente). Em nenhum cenário o resultado seria 70, pois 70 é o cod_carreira de 'Suporte Técnico', que não começa com 'a'. O correto seria: se nenhuma linha for selecionada, o MAX retorna NULL; se as linhas 'Analista de Sistemas' e 'Analista de Redes' forem selecionadas (case-insensitive), o MAX seria 40. Portanto, a assertiva está errada.