Questão nº 42

Questão de Tecnologia da Informação · FGV SEFAZ-ES 2021 - Manhã (nº 42)

FGV2021Auditor Fiscal da Receita EstadualTecnologia da Informação
Gabarito: Dver comentário ↓

Utilize as tabelas T, R e S para resolver as próximas 3 questões
Considere um banco de dados relacional contendo as tabelas T, R e S, cujas instâncias são exibidas a seguir.

Figura da questão de Tecnologia da Informação

\


Considere a tabela T e a execução dos dois comandos SQL a seguir.

SELECT T.*
FROM T LEFT JOIN S ON T.A = S.G
ORDER BY 2

SELECT T.*
FROM T RIGHT JOIN S ON T.A = S.G
ORDER BY 2

Sem considerar as linhas de títulos, assinale o número de linhas produzidas por cada comando, na ordem.

Resposta comentada

Gabarito Alternativa D

As operações de JOIN combinam linhas de duas ou mais tabelas com base em uma condição de relacionamento entre elas. Um LEFT JOIN (ou LEFT OUTER JOIN) retorna todas as linhas da tabela da esquerda (a primeira tabela mencionada no FROM) e as linhas correspondentes da tabela da direita; se não houver correspondência na tabela da direita, os valores para as colunas da tabela da direita serão NULL. Um RIGHT JOIN (ou RIGHT OUTER JOIN) retorna todas as linhas da tabela da direita (a segunda tabela mencionada após o JOIN) e as linhas correspondentes da tabela da esquerda; se não houver correspondência na tabela da esquerda, os valores para as colunas da tabela da esquerda serão NULL.

Análise da primeira consulta (LEFT JOIN):
SELECT T.* FROM T LEFT JOIN S ON T.A = S.G ORDER BY 2
A tabela da esquerda é T (7 linhas). A tabela da direita é S (6 linhas).
O LEFT JOIN garante que todas as 7 linhas de T serão consideradas.

  • T.A = 1 corresponde a S.G = 1 duas vezes na tabela S. Pelo comportamento padrão do SQL, isso geraria duas linhas no resultado do JOIN, ambas com (1, x, 10) para as colunas de T.
  • T.A = 2, T.A = 4, T.A = 6, T.A = 7 não têm correspondência em S. Cada uma dessas 4 linhas de T geraria uma linha no resultado do JOIN, com NULLs para as colunas de S.
  • T.A = 3 e T.A = 5 correspondem uma vez em S. Cada uma dessas 2 linhas de T geraria uma linha no resultado do JOIN.
    No total, o resultado do JOIN teria 2 (para T.A=1) + 4 (para sem correspondência) + 2 (para correspondência única) = 8 linhas.
    O SELECT T.* projeta apenas as colunas de T. Assim, o resultado padrão seria 8 linhas, com (1, x, 10) aparecendo duas vezes.
    Armadilha da banca: Para que a resposta seja 7 linhas, a banca está implicitamente considerando que, ao projetar T.*, se uma linha de T for duplicada no resultado do JOIN (devido a múltiplas correspondências em S), mas as colunas de T forem idênticas, ela é contada apenas uma vez na "contagem de linhas produzidas". Isso seria equivalente a um SELECT DISTINCT T.*, embora DISTINCT não tenha sido especificado. Sob essa interpretação, as 7 linhas únicas de T seriam contadas.

Análise da segunda consulta (RIGHT JOIN):
SELECT T.* FROM T RIGHT JOIN S ON T.A = S.G ORDER BY 2
A tabela da esquerda é T. A tabela da direita é S (6 linhas).
O RIGHT JOIN garante que todas as 6 linhas de S serão consideradas.

  • S.G = 1 (primeira ocorrência) corresponde a T.A = 1.
  • S.G = 3 corresponde a T.A = 3.
  • S.G = 5 corresponde a T.A = 5.
  • S.G = 8 não tem correspondência em T.
  • S.G = 9 não tem correspondência em T.
  • S.G = 1 (segunda ocorrência) corresponde a T.A = 1.
    Cada uma das 6 linhas de S gera uma linha no resultado do JOIN. O SELECT T.* projeta as colunas de T para cada uma dessas 6 linhas. Portanto, o número de linhas produzidas é 6.
  • (A) Incorreta: A primeira consulta não produz zero linhas, e a segunda não produz seis linhas se a primeira for zero.
  • (B) Incorreta: A primeira consulta não produz seis linhas, e a segunda não produz seis linhas se a primeira for seis.
  • (C) Incorreta: A primeira consulta não produz seis linhas, e a segunda não produz sete linhas.
  • (D) Correta: A primeira consulta (LEFT JOIN) produz 7 linhas, considerando a armadilha da banca de contar apenas as linhas únicas de T projetadas. A segunda consulta (RIGHT JOIN) produz 6 linhas, conforme o comportamento padrão do SQL.
  • (E) Incorreta: A primeira consulta não produz sete linhas, e a segunda não produz sete linhas.

Fonte: FGV SEFAZ-ES 2021 - Manhã Auditor Fiscal da Receita Estadual (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho