SóProvas


ID
1770496
Banca
FGV
Órgão
PGE-RO
Ano
2015
Provas
Disciplina
Banco de Dados
Assuntos

Analise os comandos SQL a seguir. 

I.

select distinct x1.nome

from X x1

where exists

          (select * from X x2

           where x1.nome = x2.nome)

II.

select distinct x1.nome

from X x1, X x2

where x1.nome = x2.nome

III.

select distinct x1.nome

from X x1, X x2

where x1.nome <> x2.nome

Sabendo-se que é preciso produzir a lista de nomes que aparecem duas ou mais vezes na tabela X, está correto concluir sobre os comandos que:


Alternativas
Comentários
  • Nenhum cumpre o objetivo, porque não há cláusula colocando a condição dos ids serem diferentes (and x1.id <> x2.id).

  • bem, se vc tiver uma coluna id, tipo

    nome   |   id

    --------------------

    ana      | 1

    maria   | 2

    maria   | 3

    joao     | 4

    pedro  | 5

    pedro  | 6

    pedro  | 7

    -----------------

    uma saída seria

    select distinct x1.nome from x x1, x x2 where x1.nome=x2.nome and x1.id <> x2.id;

    produziria como resultado

    nome

    -----------------

    maria

    pedro

    ---------------------


  • A primeira e a segunda query são iguais, porém escritas de forma diferentes. Elas mostram todos os nomes que são iguais entre as duas tabelas. Aparecerão todos, visto que trata-se da mesma tabela. A terceira query quer os nomes diferentes entre as duas tabelas. Como elas são a mesma tabela, aparecerão todos as linhas também, visto que apenas em uma linha eles serão iguais. Nas restantes, os nomes são diferentes, atendendo a query. 

    Uma query simples que mostra quais nomes se repetem duas ou mais vezes é a seguinte: 

    select x.nome

    from x

    group by x.nome

    having count(*) >=2

    ;
  • Essa questão é bem simples de resolver, o avaliador pede que liste um nome que apareça duas ou mais vezes na lista.

    Pois bem, vejam que em todas as opções ele começou com a cláusula "Distinct", a mesma elimina os resultados duplicados exibindo apenas os valores individuais. Concluímos então, que nenhuma das opções poderia listar um nome duas ou mais vezes em uma lista, já que a cláusula distinct elimina as redundâncias.

    Com isso a resposta correta é a letra D.