A instrução SQL que apresenta resultado equivalente à instru...

Próximas questões
Com base no mesmo assunto
Q978943 Banco de Dados

As tabelas a e b abaixo, com os respectivos registros, são referência para a questão. 


        

A instrução SQL que apresenta resultado equivalente à instrução “(SELECT * FROM a) INTERSECT (SELECT * FROM b)” no MySQL 5.7 ou 8 é:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a D - SELECT DISTINCT valor FROM a INNER JOIN b USING (valor).

A questão aborda o conceito de operações de conjuntos em sistemas de gerenciamento de banco de dados, mais especificamente o MySQL. O foco é compreender o operador INTERSECT, que não é explicitamente suportado pelo MySQL, e como simular esse comportamento através de outros comandos SQL disponíveis. Para resolver essa questão, o aluno deve conhecer:

  • A semântica dos operadores de conjunto UNION, INTERSECT, e EXCEPT (ou MINUS), bem como suas diferenças.
  • As cláusulas de junção INNER JOIN, LEFT JOIN, e RIGHT JOIN, e como elas são usadas para combinar registros de duas ou mais tabelas.
  • A função da cláusula DISTINCT para eliminar linhas duplicadas em um resultado de consulta.

A cláusula INTERSECT retorna todas as linhas que são comuns a ambas as consultas. No MySQL, para simular o INTERSECT, podemos usar um INNER JOIN, que retorna linhas quando há pelo menos uma correspondência em ambas as tabelas.

A resposta correta, alternativa D, é justificada porque a cláusula SELECT DISTINCT valor em combinação com INNER JOIN usando a coluna valor selecionará valores únicos que são comuns a ambas as tabelas a e b. Portanto, esta consulta simula o comportamento de INTERSECT ao garantir que apenas linhas correspondentes e sem duplicatas sejam retornadas.

As demais alternativas não oferecem o resultado equivalente ao INTERSECT por diversos motivos:

  • Alternativa A: UNION ALL irá combinar todos os valores de ambas as tabelas, incluindo duplicatas.
  • Alternativa B: LEFT JOIN incluirá todas as linhas da tabela da esquerda (a), independente de corresponderem ou não com linhas na tabela da direita (b).
  • Alternativa C: RIGHT JOIN incluirá todas as linhas da tabela da direita (b), independente de corresponderem ou não com linhas na tabela da esquerda (a).
  • Alternativa E: Esta consulta seleciona valores da tabela a que não existem na tabela b, o que é o oposto do que o INTERSECT faz.

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

INTERSECT

INNER JOIN 

Quando o nome da coluna é o mesmo, ele pode ser unido ulizando USING(nome_da_coluna).

d-

“(SELECT * FROM a) INTERSECT (SELECT * FROM b)”

2 subqueries em 2 tabelas distintas equivale a intersect

Clique para visualizar este comentário

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