Considere as relações Empregados (codEmp, nome, salario, cod...
SELECT e1.nome FROM Empregados e1, Empregados e2 WHERE e2.codDepto IN (SELECT codDepto FROM Departamentos WHERE nome = ‘Recursos Humanos’ OR nome = ‘Vendas’) AND e1.salario > e2.salario;
É CORRETO afirmar que:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: A
A alternativa correta é a A, que afirma que a consulta retorna nomes de empregados que recebem salário superior ao salário de algum empregado que trabalha nos departamentos de Recursos Humanos e Vendas. Vamos entender por que isso está correto.
A consulta SQL apresentada é um exemplo de subconsulta correlacionada. Isso significa que ela utiliza uma subconsulta (o SELECT
interno) que depende de valores obtidos da consulta externa. Na subconsulta, selecionamos os códigos dos departamentos com nome 'Recursos Humanos' ou 'Vendas'. Já na consulta externa, comparamos esse resultado com os códigos de departamento dos empregados e buscamos por aqueles empregados (e1
) que têm um salário maior do que algum empregado (e2
) desses departamentos.
Essa comparação de salários é feita por meio da condição e1.salario > e2.salario
, que se traduz na condição para que o nome do empregado seja retornado. Como a consulta não requer que o salário de e1
seja superior a todos os salários dos empregados dos departamentos especificados, mas sim a pelo menos um deles, isso valida a escolha da alternativa A.
É importante notar que as demais alternativas não estão corretas pelos seguintes motivos:
- A alternativa B menciona que a consulta retorna empregados com salário superior a todos os empregados dos departamentos mencionados, o que não é o caso, pois a condição é atendida se
e1
tiver salário maior que pelo menos um empregadoe2
dos departamentos. - A alternativa C incorretamente sugere que a consulta exclui empregados dos departamentos de Recursos Humanos e Vendas, quando na verdade não há tal condição de exclusão.
- A alternativa D está errada pois é perfeitamente válido em SQL ter múltiplas instâncias da mesma tabela na cláusula
FROM
, contanto que elas sejam devidamente aliasadas (comoe1
ee2
no nosso caso).
Para resolver essa questão, é essencial entender como funcionam as subconsultas correlacionadas, o conceito de chave estrangeira, e como a sintaxe SQL permite comparar informações de várias tabelas ao mesmo tempo. Com esses conhecimentos, fica mais fácil identificar a lógica por trás das condições estabelecidas na consulta e chegar à alternativa 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 resposta correta é a (A).
A consulta retorna nomes de empregados que recebem salário superior ao salário de algum empregado que trabalha nos departamentos de Recursos Humanos e Vendas.
1º A cláusula WHERE seleciona todos os empregados da tabela Empregados que trabalham nos departamentos de Recursos Humanos e Vendas.
2º A cláusula WHERE seleciona todos os empregados da tabela Empregados que recebem salário superior ao salário de algum empregado selecionado na cláusula WHERE anterior (ou seja, da 1º seleção).
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo