X             ...

Próximas questões
Com base no mesmo assunto
Q567883 Banco de Dados
                                              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

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: C - 1, 3, 5

Para resolver essa questão, precisamos entender o conceito de subconsulta (ou subquery) e a cláusula NOT EXISTS em SQL. A subconsulta está sendo utilizada para verificar a existência de uma condição em outra tabela. A cláusula NOT EXISTS retorna verdadeiro se a subconsulta não retornar nenhum resultado.

O comando SQL dado está selecionando valores da coluna a da tabela X, mas somente para os registros que não possuem um correspondente na tabela Y onde Y.c é igual a X.a + 1. Ou seja, estamos procurando por valores de a na tabela X que, quando incrementados por 1, não sejam encontrados na coluna c da tabela Y.

Vamos verificar cada valor de a em X:

  • 1: Não existe um valor c em Y que seja igual a 2 (1+1), então 1 é selecionado.
  • 3: Não existe um valor c em Y que seja igual a 4 (3+1), então 3 é selecionado.
  • 4: Existe um valor c em Y que é igual a 5 (4+1), então 4 não é selecionado.
  • 5: Não existe um valor c em Y que seja igual a 6 (5+1), então 5 é selecionado.

Portanto, os valores selecionados da coluna a da tabela X são 1, 3, e 5, o que corresponde à alternativa C.

Essa questão avalia a compreensão dos conceitos de subconsulta e da operação NOT EXISTS em SQL, que são essenciais para realizar consultas condicionais avançadas em bancos de dados.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

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.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo