Questão nº 61
Questão de Informática · FGV TJTO 2022 (nº 61)
No SQL Server, considere uma tabela T com quatro linhas, nas quais os valores inteiros da coluna a são 1, 2, 4 e 6.
O resultado produzido pela execução do comando `select top 2 3*a x from T order by 1` exibe, exatamente, os valores:
- A1 e 3;
- B3 e 6; (alternativa correta)
- C4 e 6;
- D6 e 12;
- E8 e 12.
Resposta comentada
Gabarito Alternativa B
O comando SELECT TOP N ... ORDER BY X no SQL Server primeiro calcula todas as expressões na lista SELECT, depois ordena essas linhas resultantes conforme especificado no ORDER BY, e por fim seleciona as N primeiras linhas após a ordenação. A "pegadinha" comum é confundir a ordem de execução ou o que significa ORDER BY 1.
- Valores originais de
a: 1, 2, 4, 6 - Cálculo
3*a:- Para
a=1,3*a = 3 - Para
a=2,3*a = 6 - Para
a=4,3*a = 12 - Para
a=6,3*a = 18
- Para
- Resultados intermediários da coluna
x(3*a): 3, 6, 12, 18 ORDER BY 1: Significa ordenar pelo primeiro item da listaSELECT, que é3*a(oux). A ordenação padrão é ascendente.- A lista
3, 6, 12, 18já está ordenada de forma ascendente.
- A lista
TOP 2: Seleciona as duas primeiras linhas após a ordenação.- As duas primeiras linhas da lista ordenada
3, 6, 12, 18são3e6.
- As duas primeiras linhas da lista ordenada
(A) Incorreta: Esta alternativa seria o resultado se o TOP 2 fosse aplicado à coluna a original (1, 2) e depois multiplicado por 3 (3, 6), mas o ORDER BY ainda afetaria a ordem. Ou se ORDER BY 1 fosse interpretado como ORDER BY a e depois TOP 2 fosse aplicado, resultando em a=1, a=2, e então 3*a fosse aplicado, resultando em 3, 6. No entanto, a ordem de execução do SQL é crucial: primeiro calcula 3*a, depois ordena 3*a, e só então aplica TOP 2.
(B) Correta: O comando primeiro calcula 3*a para todas as linhas (3, 6, 12, 18). Em seguida, ele ordena esses valores pelo primeiro item da lista SELECT (3*a), que já estão em ordem ascendente (3, 6, 12, 18). Finalmente, TOP 2 seleciona os dois primeiros valores dessa lista ordenada, que são 3 e 6.
(C) Incorreta: Esta alternativa não se alinha com a lógica da consulta. Se houvesse um ORDER BY a DESC e TOP 2 fosse aplicado a a (6, 4) e depois multiplicado por 3, teríamos 18 e 12.
(D) Incorreta: Esta seria a resposta se a ordenação fosse ORDER BY 3*a DESC (ou ORDER BY x DESC), resultando em (18, 12) e então TOP 2 selecionaria 18 e 12. Ou se houvesse algum erro na interpretação do ORDER BY 1 e TOP. Armadilha da banca: O distrator mais tentador, pois pode levar o aluno a pensar que o ORDER BY 1 se refere à coluna a original, ou que a multiplicação 3*a ocorre depois do TOP, ou que a ordem é decrescente. No entanto, ORDER BY 1 se refere à coluna 3*a (apelidada de x), e a ordem padrão é ascendente.
(E) Incorreta: Não há um caminho lógico para se chegar a esses valores com a consulta fornecida.
Fonte: FGV TJTO 2022 Técnico Judiciário - Informática (Caderno Tipo 1). Reproduzida para fins de estudo.