Questão nº 67
Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 67)
Considere uma tabela relacional T, com uma única coluna intitulada número, cuja instância de 10 linhas contém os números inteiros de 1 até 10, um em cada linha, sem repetição.
Nessas condições, foram executados os três comandos SQL exibidos a seguir.
```
select x.número y.número A
from T x, T y
where y.número = x.número order by 1
select x.número x.número A
from T x order by 1
select distinct x.número * x.número A
from T x
```
O número de linhas produzidas em cada comando, na ordem e sem contar a linha de títulos, é:
- A1, 10, 10;
- B10, 10, 10; (alternativa correta)
- C10, 100, 10;
- D100, 10, 1;
- E100, 10, 10.
Resposta comentada
Gabarito Alternativa B
Cardinalidade refere-se ao número de linhas em um conjunto de resultados de uma consulta SQL, que é determinado pelas cláusulas FROM, WHERE e DISTINCT. A cláusula FROM define as tabelas e como elas são combinadas (por exemplo, um produto cartesiano combina cada linha de uma tabela com cada linha de outra), WHERE filtra essas linhas, e DISTINCT remove linhas duplicadas do resultado final.
(A) Incorreta: A primeira consulta, embora comece com um produto cartesiano, é filtrada pela condição where y.número = x.número, resultando em 10 linhas, não 1.
(B) Correta:
- A primeira consulta (
select x.número * y.número A from T x, T y where y.número = x.número) inicia com um produto cartesiano deTconsigo mesma (10x10 = 100 combinações). No entanto, a cláusulaWHERE y.número = x.númerofiltra essas 100 combinações para manter apenas aquelas em que o número dexé igual ao número dey. Como os números de 1 a 10 são únicos, isso resulta em 10 pares (1,1), (2,2), ..., (10,10), e, portanto, 10 linhas no resultado. - A segunda consulta (
select x.número * x.número A from T x) simplesmente processa cada uma das 10 linhas da tabelaT, calculando o quadrado de cada número. Não há filtros ou operações que alterem o número de linhas, resultando em 10 linhas. - A terceira consulta (
select distinct x.número * x.número A from T x) também calcula o quadrado de cada um dos 10 números (1, 4, 9, ..., 100). Como todos esses resultados são valores distintos entre si, a palavra-chaveDISTINCTnão encontra nenhuma duplicata para remover, mantendo as 10 linhas originais.
(C) Incorreta: A primeira consulta não retorna 100 linhas porque a cláusulaWHEREreduz o produto cartesiano para 10 linhas.
(D) Incorreta: A armadilha da banca aqui é que a primeira consulta não retorna 100 linhas devido aoWHERE, e a terceira consulta retorna 10 linhas, não 1, porque os quadrados dos números de 1 a 10 são todos distintos, entãoDISTINCTnão remove nenhuma linha.
(E) Incorreta: A primeira consulta não retorna 100 linhas; a cláusulaWHEREa restringe a 10 linhas.
Fonte: FGV TRF1 2024 Analista Judiciário - Análise de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.