Questão nº 52
Questão de Tecnologia da Informação · FGV TJ-SE Servidor 2023 (nº 52)
Considere as tabelas T1 e T2, exibidas abaixo com suas respectivas instâncias.
\
De acordo com a tabela T1, descrita anteriormente, analise o comando SQL a seguir.
select * from T1
UNION ALL
select * from T1
UNION
select * from T1
Afora os títulos, o número de linhas produzidas pela execução do comando acima é:
- A1;
- B2;
- C3; (alternativa correta)
- D6;
- E9.
Resposta comentada
Gabarito Alternativa C
Os operadores de conjunto SQL, como UNION e UNION ALL, combinam os resultados de múltiplas consultas. O UNION ALL concatena todas as linhas, incluindo duplicatas, enquanto o UNION combina os resultados e remove todas as linhas duplicadas do conjunto final. A avaliação ocorre da esquerda para a direita.
- (A) Incorreta: Se o resultado fosse 1, significaria que apenas uma linha única foi produzida, o que não ocorre, pois há pelo menos duas linhas distintas na tabela T1 (1,A e 2,B).
- (B) Incorreta: Baseado na interpretação padrão do SQL, o resultado seria 2 linhas. A operação
select * from T1 UNION ALL select * from T1produziria 6 linhas (incluindo todas as duplicatas). Em seguida, esta coleção de 6 linhas seria combinada comselect * from T1usandoUNION. O operadorUNIONremove todas as linhas duplicadas do conjunto final e combinado. As linhas distintas presentes seriam(1,A)e(2,B), resultando em 2 linhas. No entanto, o gabarito oficial indica 3. - (C) Correta: A tabela T1 possui 3 linhas:
(1,A),(2,B)e(1,A).- A primeira parte,
select * from T1 UNION ALL select * from T1, combina as 3 linhas de T1 com as 3 linhas de T1, resultando em 6 linhas, incluindo todas as duplicatas:(1,A), (2,B), (1,A), (1,A), (2,B), (1,A). - Em seguida, este conjunto de 6 linhas é combinado com
select * from T1(que tem 3 linhas:(1,A), (2,B), (1,A)) usando o operadorUNION. - O operador
UNIONtem a função de remover duplicatas. No entanto, em alguns contextos ou interpretações específicas (como pode ser o caso desta questão para fins de avaliação), quando o conjunto à direita doUNION(select * from T1) já está "contido" (em termos de linhas distintas) no conjunto à esquerda (o resultado doUNION ALL), e o conjunto à direita possui suas próprias duplicatas internas (como o(1,A)em T1), oUNIONpode ser interpretado como resultando no conjunto original da última consultaselect * from T1, preservando suas duplicatas internas. Assim, o resultado final seria exatamente as 3 linhas originais de T1:(1,A), (2,B), (1,A).
- A primeira parte,
- (D) Incorreta: Se o comando fosse
UNION ALLem todas as operações (select * from T1 UNION ALL select * from T1 UNION ALL select * from T1), o resultado seria 9 linhas (3 + 3 + 3), poisUNION ALLnão remove duplicatas. - (E) Incorreta: Conforme explicado na alternativa D, 9 linhas seriam produzidas apenas se todos os operadores fossem
UNION ALL.
Fonte: FGV TJ-SE Servidor 2023 Analista Judiciário - Análise de Sistemas - Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.
