Considerando o modelo ER apresentado pela Figura 1, analise ...

Próximas questões
Com base no mesmo assunto
Q2171703 Banco de Dados
Para responder à questão, considere o modelo entidade-relacionamento (ER) apresentado pela Figura 1 abaixo:



Figura 1 – Modelo entidade-relacionamento (ER)

Considerando o modelo ER apresentado pela Figura 1, analise expressão SQL abaixo.

select car_id, max(emc_salario)

from empregadocargo, cargo

where empregadocargo.car_id = cargo.car_id

group by car_id

having max(emc_salario) > 1000

order by max(emc_salario) desc;


Qual alternativa está correta ao executar essa expressão SQL?

Alternativas

Comentários

Veja os comentários dos nossos alunos

Gabarito: E - A expressão não executa corretamente porque possui erro de sintaxe.

Comando SQL:

select car_id, max(emc_salario)

from empregadocargo, cargo

where empregadocargo.car_id = cargo.car_id

group by car_id

having max(emc_salario) > 1000

order by max(emc_salario) desc;

Ao executar no banco de dados MySQL, em boas condições, é apresentado o seguinte erro: "Error Code: 1052. Column 'car_id' in field list is ambiguous".

Ou seja, a coluna "car_id" (presente nas tabelas "cargo" e "empregadocargo"), na cláusula SELECT, é ambígua, a execução do comando não sabe se é a coluna da tabela "cargo" ou da tabela "empregadocargo".

Solução: Colocar o nome da tabela e da coluna, na cláusula SELECT.

Comando SQL:

select empregadocargo.car_id, max(emc_salario)

from empregadocargo, cargo

where empregadocargo.car_id = cargo.car_id

group by car_id

having max(emc_salario) > 1000

order by max(emc_salario) desc;

-----------------------------------------------------------------------------------------------------------------

OBS: O mesmo erro é gerado se colocar na cláusula "GROUP BY", sem especificar na cláusula SELECT a tabela e a coluna, a seguinte instrução (podendo ser a tabela "cargo" ou "empregadocargo"):

group by empregadocargo.car_id

Solução: É preciso definir o nome da tabela e a respectiva coluna na cláusula SELECT.

------------------------------------------------------------------------------------------------------------------

Tudo certo?

Força, Foco, Fé e Gratidão.

select corrigido

SELECT empregadocargo.car_id, MAX(cargo.emc_salario) AS max_emc_salario

FROM empregadocargo

INNER JOIN cargo ON empregadocargo.car_id = cargo.car_id

GROUP BY empregadocargo.car_id

 HAVING MAX(cargo.emc_salario) > 1000

ORDER BY max_emc_salario DESC;

Clique para visualizar este comentário

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