SóProvas


ID
1703656
Banca
FGV
Órgão
TCE-SE
Ano
2015
Provas
Disciplina
Banco de Dados
Assuntos

                                              X                    Y   

                                            a   b               c   d 

                                            1   2               1   2

                                            3   3               3   4

                                            4   5               5   6

                                            5   7               7   8

                                                                  9   1

select x.a from x

where not exists

     (select * from y where y.c = x.a+1) 

Considerando-se as tabelas e o comando SQL mostrados acima, é correto concluir que esse comando produz um resultado com uma única coluna contendo somente o(s) valor(es): 

Alternativas
Comentários
  • select x.a from x > vai retornar 1,3,4,5
    where not exists > vai excluir dos números acima, os que retornarem na expressão abaixo
    (select * from y where y.c = x.a+1)  > y.c = x.a+1 vai retornar 4. Porque: quando se soma 1 a cada elemento de x.a as linhas ficam, 2,4,5,6. O único número nessa sequencia que se encontra em y.c é o 5, que está na 3ª linha. Assim a expressão vai retornar o número de x.a que se encontra na 3ª linha, que é o 4. (não é a soma, que seria 5, a soma é só para referenciar)

    O comando no fim vai tirar do primeiro select os números encontrados no segundo, neste caso apenas o 4, por força do not exists.

  • Na realidade ouve um erro na digitação faltando parenteses na clausula not exists, assim o comando ficaria select x.a from x where (NOT EXISTS (select * from y where y.c = x.a+1));

    Logo, select x.a from x retorna 1,3,4,5. O comando select * from y where y.c = x.a+1 retorna 4, mas a clausula Not Exists reverte isso para 1,3,5.

    Justificando resposta da letra C.

  • select * from y where y.c = x.a+1 retorna 4?

    O que significa esse a+1?

    E como retorna 4 se o select * é para retornar algum registro de y?

    Vamos na fé.

  • Dentro das restrições, como WHERE (Seleção da álgebra relacional), pode-se utilizar expressões aritméticas, afim de personalizar a consulta.

    Aqui no caso o examinador que saber se dentro da tabela Y, na coluna C, existe alguma ocorrência que seja igual a uma ocorrência da coluna A da tabela X, mais 1.

    Por exemplo: Para a primeira ocorrência da tabela X. No caso o número 1. O banco de dados vai somar 1+1, logo 2. E vai procurar na coluna C da tabela Y, se existe alguma ocorrência de valor = 2. Como se pode observar, não haverá nenhum dado com esse valor, logo o retorno da consulta será vazio. Como a cláusula NOT EXISTS espera um valor vazio, ela trona-se verdadeira e o número 1 (primeira ocorrência da tabela X, que é nosso dado em evidência) será apresentado na consulta externa. O mesmo ocorre com 3 e 5.

    Para o 4, temos uma ocorrência de número 5 na tabela Y, coluna C, que é resultado de 4+1.

    Espero ter ajudado.