Analise o comando SQL a seguir. select n1.numero * 10 + n2.numero x FROM NUMBERS n1, NUMBERS n2 where n2.numero = 9 - n1.numero + 1 order by n1.numero, n2.numero Tomando por base a tabela NUMBERS, o resultado produzido pelo comando acima contém 9 linhas, ignorada a linha de títulos. O número que aparece na quarta dessas nove linhas é o
- A)45.
Errada, porque 45 não aparece na sequência gerada pela combinação dos pares permitidos.
- B)46.
Correta, pois é o valor da quarta linha depois de ordenar os 9 resultados obtidos.
- C)54.
Errada, porque 54 não corresponde a nenhum dos pares gerados pela condição do WHERE.
- D)55.
Errada, pois 55 é a quinta linha da lista, não a quarta.
- E)64.
Errada, porque 64 aparece depois da quarta posição na ordenação final.
Gabarito: B
A questão mistura duas ideias básicas de SQL: produto cartesiano entre tabelas e filtro no WHERE. Como a consulta usa "FROM NUMBERS n1, NUMBERS n2" sem JOIN explícito, ela gera todas as combinações possíveis e depois aplica a condição "n2.numero = 9 - n1.numero + 1", que na prática amarra cada valor de n1 a um único valor de n2. Se a tabela NUMBERS tem os números de 1 a 9, surgem exatamente 9 pares: (1,9), (2,8), (3,7) e assim por diante, até (9,1). Agora vem a parte do "x": o comando calcula "n1.numero * 10 + n2.numero", ou seja, o número formado pelos dígitos de n1 e n2. Assim, as linhas ficam 19, 28, 37, 46, 55, 64, 73, 82 e 91, já em ordem por "n1.numero, n2.numero". A quarta linha dessa sequência é 46. Por isso o gabarito é a alternativa B. Em prova, esse tipo de questão costuma testar se você reconhece que a vírgula no FROM funciona como produto cartesiano e que o WHERE faz o recorte depois. É a velha matemática do SQL: primeiro mistura, depois organiza a bagunça.