Questão nº 62
Questão de Tecnologia da Informação · FGV SMF-RJ 2023 - Manhã (P1) (nº 62)
Considere a existência de uma tabela relacional N, com apenas uma coluna, intitulada numero, contendo os números inteiros de 1 até 100, um em cada linha, como ilustrada a seguir.
\
Como pode haver discrepâncias entre implementações da linguagem SQL, é dado que a função sqrt(x) retorna a raiz quadrada de x e que a expressão a % b retorna o resto da divisão inteira de a por b.
Analise o comando SQL a seguir, que faz referência à tabela N descrita anteriormente.
select n1.numero * n2.numero from N n1, N n2 where n1.numero <> n2.numero
O número de linhas do resultado produzido pela execução desse comando, sem contar a linha de títulos, é:
- A9.000
- B9.110
- C9.900 (alternativa correta)
- D9.991
- E10.000
Resposta comentada
Gabarito Alternativa C
Quando você lista duas tabelas na cláusula FROM sem especificar uma condição de junção explícita (como JOIN ON), o SQL realiza um produto cartesiano. Isso significa que cada linha da primeira tabela é combinada com cada linha da segunda tabela, criando todas as combinações possíveis. Em seguida, a cláusula WHERE atua como um filtro, removendo as linhas que não atendem à condição especificada.
- (A) Incorreta: Esta alternativa não reflete a lógica do produto cartesiano seguido da filtragem.
- (B) Incorreta: Esta alternativa não reflete a lógica do produto cartesiano seguido da filtragem.
- (C) Correta: A tabela
Npossui 100 linhas (de 1 a 100). A cláusulafrom N n1, N n2realiza um produto cartesiano entre a tabelaNe ela mesma. Isso resulta em combinações de linhas. A condiçãowhere n1.numero <> n2.numerofiltra essas combinações, removendo todas as linhas onden1.numeroé igual an2.numero. Existem exatamente 100 dessas combinações (1 com 1, 2 com 2, ..., 100 com 100). Portanto, o número de linhas restantes é $10.000 - 100 = 9.900$. - (D) Incorreta: Esta alternativa não reflete a lógica do produto cartesiano seguido da filtragem.
- (E) Incorreta: Esta é a armadilha da banca. 10.000 seria o número de linhas se não houvesse a cláusula
WHERE. Essa alternativa representa o produto cartesiano completo antes de qualquer filtragem, ignorando a condiçãon1.numero <> n2.numero.
Fonte: FGV SMF-RJ 2023 - Manhã (P1) Fiscal de Rendas (Caderno Tipo 1). Reproduzida para fins de estudo.
