No contexto das tabelas T1 e T2 definidas acima, considere a...
Na questão, considere as tabelas T1 e T2 exibidas a seguir com suas respectivas instâncias.
T1 T2
a b a c
10 A 10 7
11 B 11 9
12 C 15 NULL
14 D
No contexto das tabelas T1 e T2 definidas acima, considere a execução do comando SQL a seguir.
select t2 . *
from T2
where t2 . a not in
(select t1 . a from T1)
A partir da execução desse comando, o número de linhas que
aparece, além da linha de títulos, é
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a B - 1.
A questão aborda o conceito de subconsultas (subqueries) e a cláusula NOT IN em SQL. O comando SELECT
é utilizado para realizar consultas em tabelas de um banco de dados, e a cláusula WHERE é utilizada para filtrar os resultados com base em uma condição específica. Neste caso específico, estamos interessados em contar o número de linhas da tabela T2 que possuem valores na coluna a que não existem na coluna a da tabela T1.
Para resolver essa questão, é importante entender o comportamento do NOT IN. Este operador é usado para excluir os registros que correspondem aos valores dentro do parênteses que segue a cláusula. A subconsulta (SELECT t1.a FROM T1)
retorna os valores 10
, 11
, 12
e 14
.
A condição especificada na cláusula WHERE
é que queremos os registros de T2 cuja coluna a não contém nenhum desses valores retornados pela subconsulta. Se olharmos para os valores da coluna a em T2, vemos que temos 10
, 11
e 15
. Dos três, apenas 15
não aparece na lista da subconsulta, e como a linha correspondente a 15
em T2 é a única que satisfaz a condição, apenas uma linha será retornada na consulta.
Portanto, a execução desse comando resultará na exibição de apenas uma linha, e é por isso que a alternativa B está correta.
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
A utilização do IN se da sempre que for uma comparações simples.
Gabarito B
Veja que a consulta mais externa irá retornar todos os atributos de t2 para aqueles registros em que o valor de a não aparece na lista composta por todos os valores de t1.a, dada a linha de código a seguir:
where t2.a not in (select t1.a from T1)
Assim, se o valor de t2.a existir também em t1.a, o registro de t2 não será retornado. Dadas essas condições, somente o terceiro registro de t2 é retornado, pois o único valor de T2.a que não está também em T1.a é 15.
Arthur Mendonça | Direção Concursos 22/04/2020 às 16:07
Veja que a consulta mais externa irá retornar todos os atributos de t2 para aqueles registros em que o valor de a não aparece na lista composta por todos os valores de t1.a, dada a linha de código a seguir:
where t2.a not in (select t1.a form T1)
Assim, se o valor de t2.a existir também em t1.a, o registro de t2 não será retornado. Dadas essas condições, somente o terceiro registro de t2 é retornado, pois o único valor de T2.a que não está também em T1.a é 15.
Fiquei bolado com esse select t2.* from t2
Até o presente momento eu só tinha visto select(*) from t2
Julguei que daria um erro, vi 0 na alternativa A e pensei ser o caso de uma pegadinha. Errei.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo