A instrução SQL que apresenta resultado equivalente à instru...
As tabelas a e b abaixo, com os respectivos registros, são referência para a questão.
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