SóProvas


ID
5263981
Banca
FGV
Órgão
IMBEL
Ano
2021
Provas
Disciplina
Banco de Dados
Assuntos

Considere o comando SQL a seguir, executado num banco de dados relacional com duas tabelas, R1 e R2, contendo 2.000 e 5.000 registros, respectivamente. R1 e R2 possuem chaves primárias definidas.
SELECT DISTINCT * FROM A, B
Assinale a opção que indica o número de linhas produzidas na execução.

Alternativas
Comentários
  • Quando colocamos tabelas separadas por vírgula na cláusula FROM, estamos fazendo o produto cartesiano delas, ou seja, a combinação de todas as linhas de uma com todas as linhas da outra. Assim, para sabermos a quantidade total de registros do retorno da consulta, basta multiplicarmos a quantidade de linhas das tabelas: 2.000 * 5.000 = 10.000.000.

    Note que temos um DISTINCT na consulta, o que implica que eventuais registros repetidos no resultado da consulta devem ser elminados. Porém, veja que a consulta traz todos os campos das tabelas, e, como o próprio enunciado define, há as chaves primárias das tabelas entre esses atributos. Assim, não haverá nenhum registro repetido entre esses dez milhões, já que os valores das chaves primárias são únicos e não nulos.

  • Acredito que muitos colegas erraram por desatenção.

    O enunciado nos diz:

    "...duas tabelas, R1 e R2, contendo 2.000 e 5.000 registros, respectivamente. R1 e R2 possuem chaves primárias definidas."

    Atenção na "chaves primárias definidas", com esta simples informação PODEMOS AFIRMAR QUE NÃO POSSUEM TUPLAS DUPLICADAS! Lembrem-se da restrição de chave, que menciona que a PK não deve se repetir!

    Analisando comando:

    SELECT DISTINCT * FROM A, B

    O DISTINCT está somente para sujar a nossa visão, pois, NESTA QUESTÃO, as chaves primárias já estão garantido que as tuplas não são duplicadas ( Frisei o nesta questão, pois alguns colegas poderão falar que o distinct serve para outras funções, sim sabemos disto, mas especificamente nesta questão não tem função)

    a parte FROM A,B é um multiplicação e não uma soma ( invalidando a alternativa D)

    Lembrando que este FROM A,B é uma forma de implementar um CROSS JOIN (todo mundo com todo mundo)

    Portanto,

    SELECT DISTINCT * FROM A, B

    2.000 x 5.000 = 10.000.000

    GABARITO ALTERNATIVA E

  • Complementando o caro Max Q,

    SELECT DISTINCT * FROM A, B

    A parte destacada faz o CROSS JOIN ou o também conhecido PRODUTO CARTESIANO, do modo como está, fará a combinação de todas as possibilidades 2.000 x 5.000, para que isso não ocorra, deveria ter uma restrição especificada na cláusula WHERE, como está não está especificada, haverá a produção de todas as possibilidades.