|
Select m.id, m.descricao, c.classe_organica,
sum(e.massa*me.atomos) as massa,
count(distinct e.id) as elementos
From molecula m
inner join mol_ele me
on me.mol_id = m.id
Left outer join elemento e
on e.id = me.ele_id
Left outer join celula c
on exists (select 1
from cel_mol cm
where cm.mol_id = m.id
and cm.cel_id = c.id)
Where e.massa > 0
Group by m.id, m.descricao, c.classe_organica
Having sum(me.atomos) between 7 and 10
Order by m.descricao;
OBS: considere que todos os campos e tabelas envolvidos existam.
|
Com base no padrão SQL ANSI 92, considere a consulta SQL ao lado e identifique as afirmativas a seguir como para verdadeiras (V) ou falsas (F):
( ) A cláusula where força que left outer join elemento funcione como um inner join.
( ) Se houver mais do que uma molecula com a mesma classe organica, o resultado do sum será multiplicado pela quantidade de moléculas.
( ) Como foi escrito, o group by força um produto cartesiano entre os dados da molecula (id, descricao e quantidade de elementos químicos necessários para compor essa molecula) com as classes organicas das celulas que possuem esta molecula.
( ) O having limita o retorno de qualquer celula que contenha mais que 7 (sete) e menos que 10 átomos.
( ) O exists elimina a chance de que exista qualquer produto cartesiano nessa consulta, tornando o resultado do sum sempre correto.
( ) Uma vez que a maior grandeza é celula, se houver dez células diferentes, os dados de molecula serão retornados dez vezes.
Assinale a alternativa que apresenta a sequência correta, de cima para baixo.